Excel 2019中统计二维数组内非零唯一行数量的公式需求
Excel 2019中统计二维数组内非零唯一行数量的公式需求
我完全理解你的需求啦——要在Excel 2019环境下,对由公式生成的二维数组,统计其中非(0,0)的唯一行数量,而且要求不能依赖Excel 365的动态数组功能、不能用VBA,最好连需要按Ctrl+Shift+Enter的数组公式都不用。
核心思路
咱们可以把每一行的两个元素拼接成一个唯一的文本标识(比如把行44846,1拼成字符串"44846,1"),这样就能把“行的唯一性判断”转化为“文本的唯一性判断”来处理。之后过滤掉"0,0"这个无效行,再统计剩余文本中唯一值的数量(重复的行只算第一次出现的那一次)。
具体公式
把下面公式里的your_array_formula替换成你实际生成二维数组的原公式即可:
=SUMPRODUCT( --(INDEX(your_array_formula,ROW(INDIRECT("1:"&ROWS(your_array_formula))),1)&","&INDEX(your_array_formula,ROW(INDIRECT("1:"&ROWS(your_array_formula))),2)<>"0,0"), --(COUNTIF( OFFSET(your_array_formula,0,0,ROW(INDIRECT("1:"&ROWS(your_array_formula))),2), INDEX(your_array_formula,ROW(INDIRECT("1:"&ROWS(your_array_formula))),1)&","&INDEX(your_array_formula,ROW(INDIRECT("1:"&ROWS(your_array_formula))),2) )=1) )
公式解释
- 拼接行标识:
INDEX(...)&","&INDEX(...)把每一行的两个元素拼成一个字符串,用来唯一标识该行; - 过滤无效行:
--(..."<>"0,0")把非(0,0)的行标记为1,无效行标记为0; - 统计首次出现的唯一行:
COUNTIF(OFFSET(...),...)统计从数组第一行到当前行中,当前行标识出现的次数,--(...=1)把首次出现的行标记为1,重复出现的标记为0; - 汇总结果:SUMPRODUCT把上面两个标记数组相乘后求和,得到的就是非零唯一行的数量。
验证你的示例
- 第一个示例数组代入后,公式返回
1,符合预期; - 第二个示例数组返回
2,正确; - 第三个示例数组返回
4,完全符合需求。
注意事项
- 如果你的数组元素本身包含逗号,建议把拼接用的分隔符换成其他不冲突的字符(比如
"|"),避免拼接后的字符串出现歧义; - 确保
your_array_formula返回的是标准的二维数组(行×列结构),这样ROWS函数才能正确识别数组的行数。
备注:内容来源于stack exchange,提问作者alejnavab
相关产品推荐
相关产品推荐

