如何实现复选框分段计数:TRUE时统计上方连续FALSE及自身
问题描述

我有一组复选框,希望实现右侧列所示的计数功能:当某复选框的值为TRUE时,统计其上方所有连续的FALSE值复选框,再加上自身,直到遇到另一个TRUE值时停止统计。
统计TRUE或FALSE值本身很简单,但我无法实现上述的分段控制逻辑。请问有什么解决思路吗?
解决思路
方法一:Excel公式实现(无需编程)
假设复选框的TRUE/FALSE值存放在A列(从A2开始,A1为表头),计数结果放在B列:
在B2单元格输入以下公式,然后下拉填充:
=IF(A2=TRUE,ROW()-XLOOKUP(TRUE,A$1:A1,ROW(A$1:A1),0,0,-1),"")
公式逻辑:
XLOOKUP(TRUE,A$1:A1,ROW(A$1:A1),0,0,-1):向上查找当前行上方区域里第一个TRUE值的行号,找不到时返回0(对应第一个出现的TRUE)ROW()-计算当前行与上一个TRUE行的差值,这个差值正好是「上方连续FALSE的数量+当前行的1个TRUE」IF(A2=TRUE,...,""):仅当当前行是TRUE时显示计数,FALSE行留空
如果你的Excel版本不支持XLOOKUP,可用LOOKUP替代:
=IF(A2=TRUE,ROW()-LOOKUP(2,1/(A$1:A1=TRUE),ROW(A$1:A1)),"")
方法二:VBA代码实现(适合批量复杂场景)
如果需要更灵活的控制,可通过VBA遍历数据列:
Sub CountContinuousFalse() Dim lastRow As Long Dim prevTrueRow As Long Dim i As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row prevTrueRow = 0 ' 初始上一个TRUE的行号设为0 For i = 2 To lastRow If Cells(i, "A").Value = True Then Cells(i, "B").Value = i - prevTrueRow prevTrueRow = i ' 更新上一个TRUE的行号为当前行 Else Cells(i, "B").Value = "" ' FALSE行留空 End If Next i End Sub
使用方法:打开Excel开发工具,插入模块,粘贴代码后运行即可。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

