我正在寻找更好的方法来完成以下任务。 我有2张桌子。表1包含我想要计算行数的值:
A
1 ID
2 a
3 b
4 c
5 d
6 e
7 f
表2包含按行排列的数据:
A B C D E F G
1 FileNo Data1 Data2 Data3 Data4 Data5 Data6
2 w1 a b a b a b
3 w1 a b a b e f
4 w2 c d c d e f
5 w1 c d c d a b
6 w1 b c b c e f
7 w2 a b a d a b
8 w3 c d c d e f
我需要计算以“w1”开头的行数并包含值“a”(然后是“b”和“c”等等,然后对于以“w2”开头的行相同)。 蛮力方式,我怎么看,就是在每一行中使用COUNTIF根据行中值的存在得到1或0。然后使用SUMPRODUCT根据FileNo标准和那些1/0计算行数。问题是上面只是一个例子。我实际上在表1中有大约40个值,在表2中有几千个。在数千行中使用带有COUNTIF的40列看起来很笨重。我相信有更优雅的方法来解决这个问题。
答案 0 :(得分:0)
你必须求助于易变OFFSET¹ function才能遍历寻找存在ws x 值的行,并且至少出现一次 a,b ,c,d,e 或 f 。
J2中的数组公式是
=SUM(IF($A$2:$A$9999=J$1, SIGN(COUNTIFS(OFFSET($A$2, ROW($1:$9998)-1, 1, 1, 6), $I2))))
需要使用 Ctrl + Shift + Enter↵来最终确定数组公式。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。将J2填充到L2然后将J2:L2填充到J7:L7。
为了您自己的目的而转录此公式时,请注意虽然A2:9999
和ROW(1:9998)
被一行错开,但它们的大小相同且非常重要。 ROW(...)
应始终从 1 开始,但与A列中的范围相同。您正在寻找 A2中的位置:A9999,而不是工作表上的物理行号。
我尝试对来自ws1的结果进行颜色匹配,以便您可以轻松识别该标准对的工作结果。
¹ OFFSET被认为是一个易失性函数,只要工作簿中的任何内容发生更改,就会重新计算。