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

Google Sheets/Excel:逐行动态范围多行列值计数(排除首尾单元格)

统计每行非空单元格首尾间指定值的出现次数

先把你的数据整理成清晰的表格:

行号ABCDE
1RedBlueDark GreenBlue
2Light BlueRedBlueRed
3BlueBlackDark Green
4Light BlueLight Blue
5Dark Green
6BlueRedGreenBlackBlue
7Dark GreenBlue

针对你需要统计指定值(比如Blue)在每行非空首尾单元格之间的出现次数需求,这里提供两种Excel公式方案,适配不同版本:

方案1:适用于Excel 365/2021(支持LAMBDA函数)

假设你把目标值(比如Blue)放在单元格F1,在任意空白单元格输入以下公式(直接回车即可):

=SUM(
    BYROW(A1:E7, LAMBDA(row,
        LET(
            nonEmptyVals, FILTER(row, row<>""),
            totalMatches, COUNTIF(nonEmptyVals, F1),
            isFirstMatch, IF(INDEX(nonEmptyVals, 1) = F1, 1, 0),
            isLastMatch, IF(INDEX(nonEmptyVals, COUNTA(nonEmptyVals)) = F1, 1, 0),
            MAX(0, totalMatches - isFirstMatch - isLastMatch)
        )
    ))
)

公式逻辑拆解:

  1. BYROW遍历每行:对A1:E7的每一行单独处理
  2. 提取非空值:FILTER(row, row<>"")拿到当前行所有非空单元格的内容
  3. 统计总匹配数:COUNTIF统计当前行目标值的出现次数
  4. 判断首尾匹配:分别检查第一个和最后一个非空单元格是否等于目标值,是则记1,否则0
  5. 计算中间匹配数:总次数减去首尾的匹配数,用MAX(0,...)避免出现负数(比如某行只有一个目标值时,结果为0)
  6. 求和所有行:把每行的中间匹配数相加得到最终结果

用你的示例验证:最终结果为2,完全符合预期(行1的第2个Blue、行2的第3个Blue)。

方案2:适用于旧版Excel(不支持LAMBDA)

如果你的Excel版本不支持LAMBDA函数,可以使用以下数组公式(输入后需要按Ctrl+Shift+Enter确认):

=SUM(
    IF(
        COUNTA(A1:E7)>1,
        COUNTIF(A1:E7,F1) - 
        --(INDEX(A1:E7,ROW(A1:E7),MATCH("*",A1:E7,0))=F1) - 
        --(INDEX(A1:E7,ROW(A1:E7),MAX(IF(A1:E7<>"",COLUMN(A1:E7),0)))=F1),
        0
    )
)

公式逻辑拆解:

  • COUNTIF(A1:E7,F1):统计每行目标值的总次数
  • INDEX(...,MATCH("*",...,0)):定位每行第一个非空单元格,判断是否等于目标值
  • INDEX(...,MAX(IF(...)):定位每行最后一个非空单元格,判断是否等于目标值
  • --():将布尔判断结果转为1或0
  • IF(COUNTA(...>1),...):如果行只有1个非空单元格,直接返回0(没有中间位置)

这个公式同样会返回示例中的结果2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:55:49