快速多关键字统计

文章介绍了一个使用VBA宏在Excel中按章节统计特定关键字(如“√”、“×”、“〇”、“空缺”)数量的方法。通过创建字典对象存储章节范围,然后使用CountIf函数计算每个关键字在相应章节数据区域内的出现次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例需求:在每个章节中统计关键字(“√”, “×”, “〇”, “空缺”)的个数,B列中的章节编号作为章节划分的标识,例如1.1.1 ~ 1.1.5为第1.1章节,对应工作表的12 ~ 16行,其中黄色列为需要统计的数据区域,即E12:AA16,统计结果填写在AB:AE列中每个章节的标题行内,如下图所示。

在这里插入图片描述

解决此问题的几个要点。

  • 识别每个章节所在行
  • 确定每个章节的数据区域
  • 统计包含关键词的单元格个数
  • 将统计结果写入指定单元格

示例代码如下。

Sub Demo()
    Dim objDic As Object
    Dim rngData As Range
    Set objDic = CreateObject("scripting.dictionary")
    Set rngData = Range([B9], Cells(Rows.Count, 2).End(xlUp))
    For Each rngcel In rngData
        ch = Split(rngcel.Value, ".")
        If VBA.IsNumeric(ch(0)) Then
            If objDic.exists(ch(0)) Then
                Set objDic(ch(0)) = Union(objDic(ch(0)), rngcel)
            Else
                Set objDic(ch(0)) = rngcel
            End If
        End If
    Next rngcel
    skey = Array("√", "×", "〇", "空缺")
    For Each strKey In objDic.keys
        Set rngCh = objDic(strKey).Offset(0, 3).Resize(, 23)
        iRow = objDic(strKey).Cells(1).Row - 1
        For j = 0 To UBound(skey)
            Cells(iRow, 28 + j).Value = Application.CountIf(rngCh, skey(j))
        Next j
    Next strKey
End Sub

【代码解析】
第4行代码创建字典对象。
第5行代码定位B列数据区域。
第6~15行代码循环遍历B列单元格。
第7行代码调用split函数拆分单元格,分隔符为半角句号。
第8行代码判断拆分后的数组第一元素(即章节号中第一个分隔符之前的数字,以下检查章号)是否为数字,如果不是数字,说明该行是章节标题行。
第9行代码判断字典中是否已经存在该章号。

  • 如果已经存在,那么第10行代码调用union函数将当前单元格与字典中保存的Range对象进行合并。
  • 如果不存在,第12行代码将当前单元格保存在字典中。

第16行代码指定关键字数组。
第17~23行代码循环遍历关键字数组。
第18行代码定位每个章节的数据区域。
第19行代码获取章节的标题行。
第20~22行代码循环统计每个关键字。
第21行代码调用工作表函数CountIf统计在指定的单元格区域内包含关键词的单元格个数。
第25行代码释放对象变量占用的系统资源。

https://club.excelhome.net/thread-1651481-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值