Google Sheets:满足相邻列匹配条件的行计数需求
解决方案
需求回顾
之前使用公式:
=sum(byrow(choosecols(A:E,1,3,5),lambda(Σ,ifna(xmatch("a",Σ)^0))))
实现了统计指定列(1、3、5列)至少含一个"a"的行数,同一行内多次出现"a"仅计数一次。
现在需要统计满足以下条件的行数:
- 指定列(col1、col3、col5)包含字符串"a",且该列相邻右侧列(col2、col4、col6)包含字符串"c"
- 同一行满足多组条件时,仅计数一次
示例数据
| col1 | col2 | col3 | col4 | col5 | col6 | |
|---|---|---|---|---|---|---|
| r1 | "a" | "b" | "c" | "d" | "e" | "a" |
| r2 | "a" | "c" | "a" | "d" | "e" | "c" |
| r3 | "b" | "a" | "c" | "a" | "d" | "c" |
| r4 | "a" | "c" | "a" | "c" | "e" | "d" |
| r5 | "e" | "a" | "c" | "d" | "a" | "e" |
期望结果:2(仅r2、r4符合条件)
公式实现
=SUM(BYROW(A:F, LAMBDA(r, --(MAX((INDEX(r,,{1,3,5})="a")*(INDEX(r,,{2,4,6})="c"))>0))))
公式解释
BYROW(A:F, LAMBDA(r, ...)):逐行遍历A到F列的数据INDEX(r,,{1,3,5})="a":提取当前行的1、3、5列,判断每个单元格是否等于"a",生成布尔数组INDEX(r,,{2,4,6})="c":提取当前行的2、4、6列,判断每个单元格是否等于"c",生成布尔数组- 数组相乘:只有对应位置同时满足左列是"a"、右列是"c"时,结果为1,否则为0
MAX(...)>0:检查当前行是否存在至少一组符合条件的列对,存在则返回TRUE--(...):将布尔值转换为1(符合)或0(不符合)SUM(...):对所有行的结果求和,得到最终符合条件的总行数
内容的提问来源于stack exchange,提问作者Mr. J
相关产品推荐
相关产品推荐

