You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel中统计连续勾选的复选框分组数量?

Excel统计同一行连续勾选复选框的分组数量

一、公式实现步骤

1. 绑定复选框到单元格

每个复选框右键→设置控件格式→控制→单元格链接,将第2行的12个复选框分别链接到B2至M2单元格(勾选时对应单元格显示TRUE,未勾选显示FALSE),第3、4行同理绑定到对应行的B列到M列。

2. 标记分组起始位置(辅助列)

在A2单元格输入FALSE(作为第一个复选框的前置判断),然后在N2单元格输入公式:

=IF(B2=TRUE, IF(OR(A2=FALSE, COLUMN(B2)=2), 1, 0), 0)

将公式向右填充到M2,再向下填充到第4行。该公式会在连续勾选组的第一个TRUE位置标记1,其余位置标记0或空。

3. 为连续组分配编号(辅助列)

在O2单元格输入公式:

=IF(B2=TRUE, IF(N2=1, MAX($O$1:O1)+1, O1), "")

向右填充到M2,再向下填充到第4行。连续勾选的复选框会被分配相同的组号,未勾选的位置为空。

4. 统计每组勾选数量

在P2、Q2、R2分别输入以下公式,统计第1、2、3组的勾选数:

# P2(组1数量)
=COUNTIF($O$2:$M$2,1)

# Q2(组2数量)
=COUNTIF($O$2:$M$2,2)

# R2(组3数量)
=COUNTIF($O$2:$M$2,3)

将这三个公式向下填充到第4行,即可得到每行3个分组的勾选数量。若要让未出现的分组显示空值而非0,可修改公式为=IF(COUNTIF($O$2:$M$2,1)=0,"",COUNTIF($O$2:$M$2,1))。

(可选)Excel 365动态数组简化公式

如果使用Excel 365及以上版本,可直接在P2输入以下动态数组公式,自动输出当前行所有分组的数量(最多3个):

=LET(
    data,B2:M2,
    starts,IF(data=TRUE,IF(OR(OFFSET(data,0,-1)=FALSE,COLUMN(data)=MIN(COLUMN(data))),1,0),0),
    groups,SCAN(0,starts,LAMBDA(a,b,IF(b=1,a+1,IF(INDEX(data,COLUMN(data)-MIN(COLUMN(data))+1)=TRUE,a,"")))),
    counts,FILTER(COUNTIF(groups,UNIQUE(FILTER(groups,groups<>""))),UNIQUE(FILTER(groups,groups<>""))<>""),
    IFERROR(counts,"")
)

公式会自动溢出到Q2、R2,无需手动填充。

二、VBA实现步骤

如果需要批量自动化统计,可使用VBA宏:

  1. 按Alt+F11打开VBA编辑器,右键点击当前工作表→插入→模块。
  2. 粘贴以下代码:
Sub CountCheckedGroups()
    Dim ws As Worksheet
    Set ws = ActiveSheet ' 可修改为指定工作表,如Sheets("数据统计")
    
    Dim rowNum As Integer
    ' 遍历第2-4行(共3行数据)
    For rowNum = 2 To 4
        Dim colNum As Integer
        Dim currentCount As Integer
        Dim groupIndex As Integer
        currentCount = 0
        groupIndex = 1
        
        ' 遍历B到M列(对应12个复选框)
        For colNum = 2 To 13
            If ws.Cells(rowNum, colNum).Value = True Then
                currentCount = currentCount + 1
            Else
                If currentCount > 0 Then
                    ' 从P列开始输出分组数量(P=16,Q=17,R=18)
                    ws.Cells(rowNum, 15 + groupIndex).Value = currentCount
                    groupIndex = groupIndex + 1
                    currentCount = 0
                End If
            End If
        Next colNum
        
        ' 处理最后一个连续勾选组
        If currentCount > 0 Then
            ws.Cells(rowNum, 15 + groupIndex).Value = currentCount
        End If
        
        ' 清空超过3组的单元格(确保每行最多显示3个分组)
        For colNum = 18 To 20
            ws.Cells(rowNum, colNum).Value = ""
        Next colNum
    Next rowNum
End Sub
  1. 修改代码中的工作表名、行号范围(如果你的数据不在2-4行),按F5运行宏,即可自动统计每行的分组勾选数量。

内容的提问来源于stack exchange,提问作者Iko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:35:37