excel如何进行多条件统计
发布时间:2023-07-02 20:45:48
这是在知乎上看到的一个问题,我试着用VBA来解决。欢迎大家就自已使用Excel中遇到的问题或想要的解决方案提问,我将尽力解答。
问题:怎么用EXCEL多条件统计重复次数计数?如下所示,要统计每个试室都有什么专业(F),每个专业多少人,用左边的表生成右边的表(生成M、N、列就行),数据大概4W多条,需要考虑效率。怎么能做出来?VBA,公式啥的行,不想用筛选。
由于没有原始表格,我自已仿照做了一个示例数据表,如下所示。
提问者只要求能够生成右边表格的右侧3列,中为列L、列M、列N,这样的话列I、列J、列K中的数据是应该都有了,这样相对来说更容易一些。由于我没有原始表格,所以我将右边表格的全部6列都使用VBA来生成。
分析左侧的数据表,统计每个试室有什么专业、每个专业有多少人,实际上就是求每个试室每个专业的不重复数。因此,我将场次、考场编码、试室、试室编码、报考专业连接起来,单独放置在列G中,将它们作为字典的键值,这样就得到了不重复的数据。在填充字典键的同时,统计重复的数据,作为键的元素值,从而得到了每个试室每个专业的人数。然后,再将字典键进行拆分,输入到右侧的场次、考场编码、试室、试室编码、报考专业对应单元格中,并将对应的元素值输入到报考人数对应的单元格,这样就得到了统计数据。
完整的VBA代码如下:
Sub StatisticsData()
Dim lngLastRow As Long
Dim rng As Range
Dim myDict As Variant
Dim myKey As Variant
Dim str() As String
Dim num As Long
‘获取数据最后一行
lngLastRow = Range(“A” &Rows.Count).End(xlUp).Row
‘将数据区域单元格中的场次考场编码试室试室编码报考专业数据组合
‘将组合后的数据临时存放在G列
‘每个单元格数据之间用空格分开
‘方便后面拆分
For Each rng In Range(“A2:A” & lngLastRow)
With rng
.Offset( , 6) = .Offset( , ) +” ” + _
.Offset( , 1) +” ” + _
.Offset( , 2) +” ” + _
.Offset( , 3) +” ” + _
.Offset( , 5)
End With
Next rng
‘字典
Set myDict =CreateObject(“scripting.dictionary”)
‘遍历列G中的数据并将其放置在字典中
‘字典中键值为不同的数据组合
‘字典中键对应的值为每种数据组合的数量,即专业报考人数
For Each rng In Range(“G2:G”& lngLastRow)
With myDict
If Not .exists(rng.Value) Then
.Item(rng.Value) = 1
Else
.Item(rng.Value) =.Item(rng.Value) + 1
End If
End With
Next rng
‘清除临时存放在列G中的数据
Range(“G2:G” &lngLastRow).Clear
‘获取字典键
myKey = myDict.keys
‘遍历字典键
For num = To UBound(myKey)
‘拆分字典键中的字符
‘分别对应场次考场编码试室试室编码报考专业
str = Split(myKey(num))
‘取出相应的值并放置在相应的单元格
With Range(“I2”)
.Offset(num, ) = str( )
.Offset(num, 1) = str(1)
.Offset(num, 2) = str(2)
.Offset(num, 3) = str(3)
.Offset(num, 4) = str(4)
.Offset(num, 5) =myDict.Item(myKey(num))
End With
Next num
‘获取统计区域的数据最后一行
lngLastRow = Range(“I” &Rows.Count).End(xlUp).Row
With Range(“I1:N” &lngLastRow)
‘对统计区域的数据排序
.Sort _
Key1:=”场次”, Order1:=xlAscending, _
Key2:=”考场编码”, Order2:=xlAscending, _
Key3:=”试室编码”, Order3:=xlAscending, _
Header:=xlYes
‘调整列宽
.Columns.AutoFit
End With
Set myDict = Nothing
End Sub
代码中有相应的注释,可以参照理解。


猜你喜欢
- excel表格怎么换行不换格?在excel表格中,换行不换格进行内容的编辑,可以让长内容尽量的显示在一个单元格内,那要怎么在同一个单元格进行
- 谷歌浏览器是很多小伙伴都比较喜欢的一款浏览器软件,相比于其他浏览器,谷歌浏览器没有过多的广告弹窗,性能也比较稳定,所以该软件也广受欢迎。但是
- win10开启hdr功能屏幕泛白怎么办?win10电脑里面有一个hdr功能,开启此功能可以让屏幕中的画面表现的更加出色,有部分用户开启win
- Win10 Mobile预览版更新后导致部分设备屏幕底部显示异常怎么办?很多升级以后的朋友反映,升级以后设备屏幕显示缩放不正常问题,设备屏幕
- 昨天微软发布了Win10创作者更新15025预览版,这个版本新增了很多功能,但是有很多朋友安装的时候出现错误,下面我们就来看看详细的解决办法
- 有些小伙伴想要安装win10系统体验一下,结果出现win10系统安装失败提示。导致失败的原因有很多,主要是因为U盘启动时,默认使用EFI引导
- Win7系统在正常使用的时候会占用很多资源,比如网络诊断,缓存还有其他各种平时大部分时候我们都用不上的资源,如果我们电脑本身内存比较小只有2
- 去除写保护可以轻松实现,如果要给硬盘加写保护呢?刚用的是clear,换成set就可以了。不过这里添加写保护的操作只对本系统有效,硬盘放到别人
- Win10开发版本10100曝光,他们接下来大概会以稳定为主继续回头编写1007x或1008x的候选版本,这个版本将会作为重大的公开预览版在
- 下面是解决win10程序无法打开应用的问题:1.右键单击win10系统桌面左下角的“搜索”按钮,然后搜索“控制面板”打开,如图所示:2.在控
- 在win7、win8设置管理员运行程序想必有很多的朋友都不知道吧,下面与大家分享下两种方法设置管理员运行程序,不会的朋友可以了解下哈很多朋友
- 如何使用CMD命令去导出文件下的文件名称到EXCEL——方法1首先查找。win XP或者win 7等系统点击桌面按Ctrl+F,进入查找对话
- Excel中如何自动复制上一行呢?本文就给大家分享一个方法。首先要创建一个Excel文件,输入所需要的内容,先用鼠标选中所需要复制的一列信息
- 生活中,我们遇到的每一个网址都有一个域名,什么是域名?现实中,域名使用的实在太多了,但域名的详细含义比较复杂,请阅读下文了解什么是网站域名?
- 苹果通常会在新系统推出后关闭旧的 iOS 版本验证通道,以防止用户降级到一个过时的系统版本。这不,上周刚发 iOS 16.0.3
- 现在基本用户都在使用win10,但是很多人对win10系统不是很了解,最近有用户跟小编反应说老是遇到底部任务栏无反应,这种情况应该怎么解决,
- 在使用w10的远程桌面功能的时候。还需要去设置允许外部设备连接你的电脑,同时还要添加相关的用户才行,那么这个设置需要到哪里去进行设置呢,快来
- 怎样删除幻灯片的动画效果如果当前幻灯片不需要设置动画效果,可以快速清除对象的动画效果。步骤1:按【Ctrl+0】组合键,打开一个演示文稿,切
- 不管是使用WPS软件撰写工作文件还是使用WPS软件编辑论文内容,将文档内容写好之后都需要在文档中添加封面页,然后就可以在封面中查看到文档内容
- 如何使用premiere将切开的视频合并?在我们想把切开的视频重新合并时,不妨试试Premier软件,那应该如何操作就让我们一起来看看吧。以