用VBA进行筛选后统计
时间:2011-08-03
来源:互联网
请各位师傅指点如何利用VBA对数据进行筛选后求平均值等。谢谢
统计.rar(8.25 KB)
附件

2011-8-3 10:58, 下载次数: 8
作者: tchenhen 发布时间: 2011-08-03
不需要用VBA,用SUBTOTAL函数就可以。
B列平均值 "=SUBTOTAL(1,B2:B192)"
C列标准偏差 "=SUBTOTAL(7,B2:B192)"
SUBTOTAL使用方法,参阅
http://club.excelhome.net/viewth ... d=912478#pid5015266
VBA代码
筛选后自动在199:200行显示结果
B列平均值 "=SUBTOTAL(1,B2:B192)"
C列标准偏差 "=SUBTOTAL(7,B2:B192)"
SUBTOTAL使用方法,参阅
http://club.excelhome.net/viewth ... d=912478#pid5015266
VBA代码
筛选后自动在199:200行显示结果
复制内容到剪贴板
With Sheets("统计")
For i = 2 To 9
.Cells(199, i) = Application.WorksheetFunction.Subtotal(1, .Range(.Cells(2, i), .Cells(192, i))) '平均值
.Cells(200, i) = Application.WorksheetFunction.Subtotal(7, .Range(.Cells(2, i), .Cells(192, i))) '标准偏差
Next i
End With
End Sub
[ 本帖最后由 mineshine 于 2011-8-3 11:49 编辑 ] 代码:
Sub TEST()With Sheets("统计")
For i = 2 To 9
.Cells(199, i) = Application.WorksheetFunction.Subtotal(1, .Range(.Cells(2, i), .Cells(192, i))) '平均值
.Cells(200, i) = Application.WorksheetFunction.Subtotal(7, .Range(.Cells(2, i), .Cells(192, i))) '标准偏差
Next i
End With
End Sub
作者: mineshine 发布时间: 2011-08-03
复制内容到剪贴板
Dim Arr, i&, j&, d, k, t, d1, t1, Brr
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
Arr = [a1].CurrentRegion
For j = 2 To UBound(Arr, 2)
For i = 2 To UBound(Arr)
If Arr(i, j) <> "" Then
d(Arr(i, 1)) = d(Arr(i, 1)) + 1
d1(Arr(i, 1)) = d1(Arr(i, 1)) + Arr(i, j)
End If
Next
k = d.keys
t = d.items: t1 = d1.items
ReDim Brr(1 To d.Count)
For ii = 0 To UBound(k)
Brr(ii + 1) = t1(ii) / t(ii)
Next
Cells(UBound(Arr) + 2, j).Resize(d.Count, 1) = Application.Transpose(Brr)
d.RemoveAll: d1.RemoveAll
Next
Cells(UBound(Arr) + 2, 1).Resize(UBound(k) + 1, 1) = Application.Transpose(k)
End Sub
代码:
Sub yy()Dim Arr, i&, j&, d, k, t, d1, t1, Brr
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
Arr = [a1].CurrentRegion
For j = 2 To UBound(Arr, 2)
For i = 2 To UBound(Arr)
If Arr(i, j) <> "" Then
d(Arr(i, 1)) = d(Arr(i, 1)) + 1
d1(Arr(i, 1)) = d1(Arr(i, 1)) + Arr(i, j)
End If
Next
k = d.keys
t = d.items: t1 = d1.items
ReDim Brr(1 To d.Count)
For ii = 0 To UBound(k)
Brr(ii + 1) = t1(ii) / t(ii)
Next
Cells(UBound(Arr) + 2, j).Resize(d.Count, 1) = Application.Transpose(Brr)
d.RemoveAll: d1.RemoveAll
Next
Cells(UBound(Arr) + 2, 1).Resize(UBound(k) + 1, 1) = Application.Transpose(k)
End Sub
作者: 蓝桥玄霜 发布时间: 2011-08-03
版主的宏可执行,有点还请修改,就是最好我选择日期后,再运行宏之后,数值在最下面单元格显示出来。再次感谢!
作者: tchenhen 发布时间: 2011-08-03
请见附件。
点选A列任一日期即可。
统计0803.rar(12.5 KB)
点选A列任一日期即可。
附件

2011-8-3 13:37, 下载次数: 6
作者: 蓝桥玄霜 发布时间: 2011-08-03
非常感谢各位师傅的指点!
作者: tchenhen 发布时间: 2011-08-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28