如何使 arrayformula 按行计算值?
How to make an arrayformula count values by row?
我尝试了很多方法,但我似乎无法找到解决一个似乎使用数组公式的相当简单问题的方法:
我有一个 sheet,我可以在其中按行获取某个科学实验运行的各个结果。
接下来,我想计算每个输出值的出现次数。输出值可以是 1 到 10 之间的数字,所以我想单独计算每个值的输出次数。
此外,我将总结总共生成了多少个单独的输出。所以我会计算一行中唯一输出的数量。
现在我的问题是,当以我通常使用它的方式使用 Arrayformula
时,它不起作用,因为它会计算并总结指定的整个矩阵的所有内容。但是,我只想计算当前行。我尝试使用 ROW
到达那里,但我失败了。
我还尝试了一些类似 =ARRAYFORMULA(SUMIF(IF(COLUMN(B1:F1),ROW(B2:F5)),ROW(B2:F5),B2:F5))
的东西来理解如何应用逻辑,但我无法让它作为 COUNTIF
版本工作。
非常感谢任何帮助和想法!
在 H2 中使用:
=INDEX(MMULT(IF(INDIRECT("B2:F"&MAX((ROW(A2:A)*(A2:A<>""))))=""; 0; 1);
FLATTEN(COLUMN(B:F)^0)))
在 J2 中使用:
=INDEX(ARRAY_CONSTRAIN(QUERY(QUERY({IFERROR(SPLIT(FLATTEN({ROW(A2:A)&"×"&B2:F}); "×"));
{SEQUENCE(10)*9^9\SEQUENCE(10)}};
"select count(Col1),Col1 where Col2 is not null group by Col1 pivot Col2");
"where Col11 < 100000 offset 1"; 0); 9^9; 10))
更新:
H1:
={"Total No. of outcomes"; ARRAYFORMULA(IFNA(VLOOKUP(ROW(A2:A);
QUERY(SPLIT(UNIQUE(FLATTEN(ROW(B2:F)&"×"&B2:F)); "×");
"select Col1,count(Col1) where Col2 is not null group by Col1"); 2; 0)))}
J1:
=INDEX({"Occurence of "&SEQUENCE(1; 10); ARRAY_CONSTRAIN(QUERY(QUERY({IFERROR(
SPLIT(FLATTEN({ROW(A2:A)&"×"&B2:F}); "×")); {SEQUENCE(10)*9^9\SEQUENCE(10)}};
"select count(Col1),Col1 where Col2 is not null group by Col1 pivot Col2");
"where Col11 < 999999 offset 1"; 0); 9^9; 10)})
demo sheet
事后想想,我认为接受的答案是最佳的,但我确实想知道您是否可以仅使用 countifs 来解决它。答案是肯定的,但你必须强制数组参数具有相同的大小和形状,否则你会得到 'array arguments different sizes' 错误,因此在 J2:
=ArrayFormula(countifs(B2:F6,mod(sequence(5,10,0),10)+1,row(B2:F6)+B2:F6-B2:F6,int(sequence(5,10,0)/10)+2))
请注意,结果列的总数使用 H2 中的以下公式给出了 不同 结果的数量:
=ArrayFormula(mmult(sign(J2:S6),sequence(10,1,1,0)))
我尝试了很多方法,但我似乎无法找到解决一个似乎使用数组公式的相当简单问题的方法:
我有一个 sheet,我可以在其中按行获取某个科学实验运行的各个结果。 接下来,我想计算每个输出值的出现次数。输出值可以是 1 到 10 之间的数字,所以我想单独计算每个值的输出次数。
此外,我将总结总共生成了多少个单独的输出。所以我会计算一行中唯一输出的数量。
现在我的问题是,当以我通常使用它的方式使用 Arrayformula
时,它不起作用,因为它会计算并总结指定的整个矩阵的所有内容。但是,我只想计算当前行。我尝试使用 ROW
到达那里,但我失败了。
我还尝试了一些类似 =ARRAYFORMULA(SUMIF(IF(COLUMN(B1:F1),ROW(B2:F5)),ROW(B2:F5),B2:F5))
的东西来理解如何应用逻辑,但我无法让它作为 COUNTIF
版本工作。
非常感谢任何帮助和想法!
在 H2 中使用:
=INDEX(MMULT(IF(INDIRECT("B2:F"&MAX((ROW(A2:A)*(A2:A<>""))))=""; 0; 1);
FLATTEN(COLUMN(B:F)^0)))
在 J2 中使用:
=INDEX(ARRAY_CONSTRAIN(QUERY(QUERY({IFERROR(SPLIT(FLATTEN({ROW(A2:A)&"×"&B2:F}); "×"));
{SEQUENCE(10)*9^9\SEQUENCE(10)}};
"select count(Col1),Col1 where Col2 is not null group by Col1 pivot Col2");
"where Col11 < 100000 offset 1"; 0); 9^9; 10))
更新:
H1:
={"Total No. of outcomes"; ARRAYFORMULA(IFNA(VLOOKUP(ROW(A2:A);
QUERY(SPLIT(UNIQUE(FLATTEN(ROW(B2:F)&"×"&B2:F)); "×");
"select Col1,count(Col1) where Col2 is not null group by Col1"); 2; 0)))}
J1:
=INDEX({"Occurence of "&SEQUENCE(1; 10); ARRAY_CONSTRAIN(QUERY(QUERY({IFERROR(
SPLIT(FLATTEN({ROW(A2:A)&"×"&B2:F}); "×")); {SEQUENCE(10)*9^9\SEQUENCE(10)}};
"select count(Col1),Col1 where Col2 is not null group by Col1 pivot Col2");
"where Col11 < 999999 offset 1"; 0); 9^9; 10)})
demo sheet
事后想想,我认为接受的答案是最佳的,但我确实想知道您是否可以仅使用 countifs 来解决它。答案是肯定的,但你必须强制数组参数具有相同的大小和形状,否则你会得到 'array arguments different sizes' 错误,因此在 J2:
=ArrayFormula(countifs(B2:F6,mod(sequence(5,10,0),10)+1,row(B2:F6)+B2:F6-B2:F6,int(sequence(5,10,0)/10)+2))
请注意,结果列的总数使用 H2 中的以下公式给出了 不同 结果的数量:
=ArrayFormula(mmult(sign(J2:S6),sequence(10,1,1,0)))