如何在两行或三行的动态范围内组合 COUNTUNIQUE 和 ARRAYFORMULA ... 或 n 行

How to combine COUNTUNIQUE and ARRAYFORMULA in a dynamic range of two or three ... or n rows

我的问题与 非常相似,但我不想逐行计算唯一出现次数,而是想在由 2 行或 3 行 3 行...或 n 行(即几行和几列)。

这是一个Google Spreadsheet sample

如有任何想法或想法,我们将不胜感激,谢谢!

由于您已经在电子表格中创建了辅助列,因此您现在可以使用:

=ARRAYFORMULA({
COUNTUNIQUE(INDIRECT(H3));
COUNTUNIQUE(INDIRECT(H4));
COUNTUNIQUE(INDIRECT(H5));
COUNTUNIQUE(INDIRECT(H6));
COUNTUNIQUE(INDIRECT(H7));
COUNTUNIQUE(INDIRECT(H8));
COUNTUNIQUE(INDIRECT(H9));
COUNTUNIQUE(INDIRECT(H10))
})

示例输出:

参考:

INDIRECT()

尝试:

=ARRAYFORMULA(QUERY(SPLIT(SORTN(FLATTEN(IFNA(
 SEQUENCE(MAX(IF(A3:E<>"", 1)*ROW(B3:B))-(ROW(B3)-1), 1, ROW(B3))&"♂"&VLOOKUP(ROUNDDOWN(
 SEQUENCE(MAX(IF(A3:E<>"", 1)*ROW(B3:B))-(ROW(B3)-1), COLUMNS(A:E)*G3, COLUMNS(A:E)*G3)/COLUMNS(A:E))-
 SEQUENCE(MAX(IF(A3:E<>"", 1)*ROW(A3:A))-(ROW(A3)-1), 1, 0)*(G3-1)&"♀"&
 SEQUENCE(MAX(IF(A3:E<>"", 1)*ROW(A3:A))-(ROW(A3)-1), COLUMNS(A:E)*G3)-(ROUNDDOWN(
 SEQUENCE(1, COLUMNS(A:E)*G3, 0)/COLUMNS(A:E))*COLUMNS(A:E))-(COLUMNS(A:E)*G3*
 SEQUENCE(MAX(IF(A3:E<>"", 1)*ROW(A3:A))-(ROW(A3)-1), 1, 0)), 
 QUERY(SPLIT(FLATTEN(IF(A3:E="",,ROW(B3:B)&"♀"&COLUMN(A:E)-(COLUMN(A3)-1)&"×"&A3:E)), "×"), 
 "where Col2 is not null", 0), 2, 0))), 9^9, 2, 1, 1), "♂"), 
 "select count(Col2) where Col1 is not null group by Col1 label count(Col2)''"))



=ARRAYFORMULA(QUERY(SPLIT(SORTN(FLATTEN(IFNA(
 SEQUENCE(MAX(IF(B3:U<>"", 1)*ROW(B3:B))-(ROW(B3)-1), 1, ROW(B3))&"♂"&VLOOKUP(ROUNDDOWN(
 SEQUENCE(MAX(IF(B3:U<>"", 1)*ROW(B3:B))-(ROW(B3)-1), COLUMNS(B:U)*W3, COLUMNS(B:U)*W3)/COLUMNS(B:U))-
 SEQUENCE(MAX(IF(B3:U<>"", 1)*ROW(B3:B))-(ROW(B3)-1), 1, 0)*(W3-1)&"♀"&
 SEQUENCE(MAX(IF(B3:U<>"", 1)*ROW(B3:B))-(ROW(B3)-1), COLUMNS(B:U)*W3)-(ROUNDDOWN(
 SEQUENCE(1, COLUMNS(B:U)*W3, 0)/COLUMNS(B:U))*COLUMNS(B:U))-(COLUMNS(B:U)*W3*
 SEQUENCE(MAX(IF(B3:U<>"", 1)*ROW(B3:B))-(ROW(B3)-1), 1, 0)), 
 QUERY(SPLIT(FLATTEN(IF(B3:U="",,ROW(B3:B)&"♀"&COLUMN(B:U)-(COLUMN(B3)-1)&"×"&B3:U)), "×"), 
 "where Col2 is not null", 0), 2, 0))), 9^9, 2, 1, 1), "♂"), 
 "select count(Col2) where Col1 is not null group by Col1 label count(Col2)''"))



更新:

=ARRAYFORMULA(QUERY(SPLIT(SORTN(FLATTEN(IFNA(
SEQUENCE(MAX(IF(INDIRECT(Y3&X3&":"&Z3)<>"", 1)*ROW(INDIRECT(Y3&X3&":"&Y3)))-(ROW(INDIRECT(Y3&X3))-1), 1, ROW(INDIRECT(Y3&X3)))&"♂"&VLOOKUP(ROUNDDOWN(
SEQUENCE(MAX(IF(INDIRECT(Y3&X3&":"&Z3)<>"", 1)*ROW(INDIRECT(Y3&X3&":"&Y3)))-(ROW(INDIRECT(Y3&X3))-1), COLUMNS(INDIRECT(Y3&":"&Z3))*W3, COLUMNS(INDIRECT(Y3&":"&Z3))*W3)/COLUMNS(INDIRECT(Y3&":"&Z3)))-
SEQUENCE(MAX(IF(INDIRECT(Y3&X3&":"&Z3)<>"", 1)*ROW(INDIRECT(Y3&X3&":"&Y3)))-(ROW(INDIRECT(Y3&X3))-1), 1, 0)*(W3-1)&"♀"&
SEQUENCE(MAX(IF(INDIRECT(Y3&X3&":"&Z3)<>"", 1)*ROW(INDIRECT(Y3&X3&":"&Y3)))-(ROW(INDIRECT(Y3&X3))-1), COLUMNS(INDIRECT(Y3&":"&Z3))*W3)-(ROUNDDOWN(
SEQUENCE(1, COLUMNS(INDIRECT(Y3&":"&Z3))*W3, 0)/COLUMNS(INDIRECT(Y3&":"&Z3)))*COLUMNS(INDIRECT(Y3&":"&Z3)))-(COLUMNS(INDIRECT(Y3&":"&Z3))*W3*
SEQUENCE(MAX(IF(INDIRECT(Y3&X3&":"&Z3)<>"", 1)*ROW(INDIRECT(Y3&X3&":"&Y3)))-(ROW(INDIRECT(Y3&X3))-1), 1, 0)), 
QUERY(SPLIT(FLATTEN(IF(INDIRECT(Y3&X3&":"&Z3)="",,ROW(INDIRECT(Y3&X3&":"&Y3))&"♀"&COLUMN(INDIRECT(Y3&":"&Z3))-(COLUMN(INDIRECT(Y3&X3))-1)&"×"&INDIRECT(Y3&X3&":"&Z3))), "×"), 
"where Col2 is not null", 0), 2, 0))), 9^9, 2, 1, 1), "♂"), 
"select count(Col2) where Col1 is not null group by Col1 label count(Col2)''"))




full explanation of the formula & how it works