Excel VBA 按时间范围筛选和统计
一、提问者需求
以2张表为例,在汇总表中统计每张表中的合计
(1)2021年4月份的BU方式个数,其它方式个数,及占比
(2)其它时间BU方式个数,其它方式个数,及占比
二、本文章配套视频
三、本文章配套课件
链接: https:// pan.baidu.com/s/1yTHWTh suZm3Uq2wTPmQJyg
提取码:1234
(百度网盘不支持谷歌浏览器打开)
四、完成代码
Sub 筛选统计()
For Each 表 In Worksheets
If 表.Name <> "汇总" Then
行数 = Sheets(表.Name).Range("A1").CurrentRegion.Rows.Count - 1
'分割日期,这一步你酌情考虑
d = "2021年4月"
开始 = DateSerial(Left(d, 4), Mid(Mid(d, 6), 1, Len(Mid(d, 6)) - 1), 1)
first = DateSerial(Left(d, 4), Mid(Mid(d, 6), 1, Len(Mid(d, 6)) - 1) + 1, 1)
n = first - 开始
结束 = DateSerial(Left(d, 4), Mid(Mid(d, 6), 1, Len(Mid(d, 6)) - 1), n)
'第一次筛选,筛选2021年4月日期的表
Sheets(表.Name).Range("a1").CurrentRegion.AutoFilter
Sheets(表.Name).Range("a1").CurrentRegion.AutoFilter Field:=2, Criteria1:=">=" & 开始, Criteria2:="<=" & 结束
'计算可见单元格
Set r1 = Sheets(表.Name).AutoFilter.Range.SpecialCells(xlCellTypeVisible)
For x = 1 To r1.Areas.Count
n1 = n1 + r1.Areas(x).Rows.Count
'第二次筛选,筛选BU
Sheets(表.Name).Range("a1").CurrentRegion.AutoFilter Field:=3, Criteria1:="BU"
Set r2 = Sheets(表.Name).AutoFilter.Range.SpecialCells(xlCellTypeVisible)
For x = 1 To r2.Areas.Count
n2 = n2 + r2.Areas(x).Rows.Count
'第三次筛选,筛选全部BU
Sheets(表.Name).Range("a1").CurrentRegion.AutoFilter
Sheets(表.Name).Range("a1").CurrentRegion.AutoFilter Field:=3, Criteria1:="BU"
Set r3 = Sheets(表.Name).AutoFilter.Range.SpecialCells(xlCellTypeVisible)
For x = 1 To r3.Areas.Count
n3 = n3 + r3.Areas(x).Rows.Count
总行数 = 总行数 + 行数
红 = 红 + n2 - 1
黄 = 黄 + n1 - 1
蓝 = 蓝 + n3 - 1
n1 = 0
n2 = 0
n3 = 0
End If
Set 总表 = Sheets("汇总")
总表.Range("B3") = 红
总表.Range("D3") = 黄 - 红
总表.Range("C3") = 红 / (红 + 黄 - 红)