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

如何实现复选框分段计数: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:17:33