在非单元格引用的 Excel 数组的每一行或每一列中查找最大值
Find maximum value in each row or column of an Excel array that is not a cell reference
我需要在 LET 调用中找到数组中一列的最大值,该列不是使用一个单元格的单元格引用。
This 适用于作为单元格引用的数组,但是当我尝试在不是单元格引用的数组上使用它时,它会失败。
比如使用这个数据。
12 2 3
3 7 5
7 8 9
=LET(Rng,$A:$C,SUBTOTAL(4,OFFSET(INDEX(Rng,1,1),,COLUMN(Rng)-MIN(COLUMN(Rng)),ROWS(Rng))))
returns [12, 8, 9] 正如你所期望的,但是 =LET(Rng,$A:$C*1,SUBTOTAL(4,OFFSET(INDEX(Rng,1,1),,COLUMN(Rng)-MIN(COLUMN(Rng)),ROWS(Rng))))
returns #VALUE
这可以在单个单元格中完成还是我必须使用多个单元格?
编辑:
期望的输出是
12 8 9
我有一个适用于绑定到单元格的数组的公式,我没有适用于不绑定到单元格的数组的公式,例如 LET
编辑 2:
最终我需要一些适用于 36x36 阵列的东西。
好的,这是一个很长的阶段,而且非常具有实验性。我觉得可能有更好的方法。为了使下面的工作正常,我使用了 ARRAYTOTEXT()
函数,我认为它只对有权访问 Microsoft365 的内部人员程序的用户可用。尽管如此,这是我的尝试:
E1
中的公式:
=LET(X,ARRAYTOTEXT(TRANSPOSE(A1:C3),1),TRANSPOSE(FILTERXML("<y><t><s>"&SUBSTITUTE(SUBSTITUTE(MID(X,2,LEN(X)-2),",","</s><s>"),";","</s></t><t><s>")&"</s></t></y>","//s[not(.< preceding-sibling::*)][not(.<= following-sibling::*)]")))
您可以通过将 A1:C3
引用替换为 RANDARRAY(4,4,1,100,1)
之类的内容来测试数组的工作情况
这是使用更传统的索引和排序的替代方法:
=LET(sa,SEQUENCE(9,1,0),sb,SEQUENCE(1,3,3,3),col,INDEX(A1:C3,MOD(sa,3)+1,QUOTIENT(sa,3)+1),
sortcol,SORTBY(col,QUOTIENT(sa,3),1,col,1),INDEX(sortcol,sb))
想法是将二维数组转换为一维数组 (col),然后先按原始数组中的列号排序,然后按数组中的值排序。最后从结果数组中每隔三个元素提取一次。这分别显示了步骤:
这是总体结果:
我忘了问题的重点是它应该适用于数组和范围:
=LET(sa,SEQUENCE(9,1,0),sb,SEQUENCE(1,3,3,3),col,INDEX(A1:C3*1,MOD(sa,3)+1,QUOTIENT(sa,3)+1),
sortcol,SORTBY(col,QUOTIENT(sa,3),1,col,1),INDEX(sortcol,sb))
或
=LET(sa,SEQUENCE(9,1,0),sb,SEQUENCE(1,3,3,3),col,INDEX(RANDARRAY(3,3),MOD(sa,3)+1,QUOTIENT(sa,3)+1),
sortcol,SORTBY(col,QUOTIENT(sa,3),1,col,1),INDEX(sortcol,sb))
矩形数组最大列的一般形式(例如 4 行乘 3 列)
=LET(arr,A1:C4*1,r,ROWS(arr),c,COLUMNS(arr),sa,SEQUENCE(r*c,1,0),sb,SEQUENCE(1,c,r,r),col,
INDEX(arr,MOD(sa,r)+1,QUOTIENT(sa,r)+1),sortcol,SORTBY(col,QUOTIENT(sa,r),1,col,1),INDEX(sortcol,sb))
对于 min,只需更改排序顺序:
=LET(arr,A1:C4*1,r,ROWS(arr),c,COLUMNS(arr),sa,SEQUENCE(r*c,1,0),sb,SEQUENCE(1,c,r,r),col,
INDEX(arr,MOD(sa,r)+1,QUOTIENT(sa,r)+1),sortcol,SORTBY(col,QUOTIENT(sa,r),1,col,-1),INDEX(sortcol,sb))
矩形数组最大行数的一般形式
=LET(arr,A1:C4*1,r,ROWS(arr),c,COLUMNS(arr),sa,SEQUENCE(r*c,1,0),sb,SEQUENCE(r,1,c,c),col,
INDEX(arr,QUOTIENT(sa,c)+1,MOD(sa,c)+1),sortcol,SORTBY(col,QUOTIENT(sa,c),1,col,1),INDEX(sortcol,sb))
再次为 min 更改排序顺序:
=LET(arr,A1:C4*1,r,ROWS(arr),c,COLUMNS(arr),sa,SEQUENCE(r*c,1,0),sb,SEQUENCE(r,1,c,c),col,
INDEX(arr,QUOTIENT(sa,c)+1,MOD(sa,c)+1),sortcol,SORTBY(col,QUOTIENT(sa,c),1,col,-1),INDEX(sortcol,sb))
我需要在 LET 调用中找到数组中一列的最大值,该列不是使用一个单元格的单元格引用。
This 适用于作为单元格引用的数组,但是当我尝试在不是单元格引用的数组上使用它时,它会失败。
比如使用这个数据。
12 2 3
3 7 5
7 8 9
=LET(Rng,$A:$C,SUBTOTAL(4,OFFSET(INDEX(Rng,1,1),,COLUMN(Rng)-MIN(COLUMN(Rng)),ROWS(Rng))))
returns [12, 8, 9] 正如你所期望的,但是 =LET(Rng,$A:$C*1,SUBTOTAL(4,OFFSET(INDEX(Rng,1,1),,COLUMN(Rng)-MIN(COLUMN(Rng)),ROWS(Rng))))
returns #VALUE
这可以在单个单元格中完成还是我必须使用多个单元格?
编辑: 期望的输出是
12 8 9
我有一个适用于绑定到单元格的数组的公式,我没有适用于不绑定到单元格的数组的公式,例如 LET
编辑 2: 最终我需要一些适用于 36x36 阵列的东西。
好的,这是一个很长的阶段,而且非常具有实验性。我觉得可能有更好的方法。为了使下面的工作正常,我使用了 ARRAYTOTEXT()
函数,我认为它只对有权访问 Microsoft365 的内部人员程序的用户可用。尽管如此,这是我的尝试:
E1
中的公式:
=LET(X,ARRAYTOTEXT(TRANSPOSE(A1:C3),1),TRANSPOSE(FILTERXML("<y><t><s>"&SUBSTITUTE(SUBSTITUTE(MID(X,2,LEN(X)-2),",","</s><s>"),";","</s></t><t><s>")&"</s></t></y>","//s[not(.< preceding-sibling::*)][not(.<= following-sibling::*)]")))
您可以通过将 A1:C3
引用替换为 RANDARRAY(4,4,1,100,1)
这是使用更传统的索引和排序的替代方法:
=LET(sa,SEQUENCE(9,1,0),sb,SEQUENCE(1,3,3,3),col,INDEX(A1:C3,MOD(sa,3)+1,QUOTIENT(sa,3)+1),
sortcol,SORTBY(col,QUOTIENT(sa,3),1,col,1),INDEX(sortcol,sb))
想法是将二维数组转换为一维数组 (col),然后先按原始数组中的列号排序,然后按数组中的值排序。最后从结果数组中每隔三个元素提取一次。这分别显示了步骤:
这是总体结果:
我忘了问题的重点是它应该适用于数组和范围:
=LET(sa,SEQUENCE(9,1,0),sb,SEQUENCE(1,3,3,3),col,INDEX(A1:C3*1,MOD(sa,3)+1,QUOTIENT(sa,3)+1),
sortcol,SORTBY(col,QUOTIENT(sa,3),1,col,1),INDEX(sortcol,sb))
或
=LET(sa,SEQUENCE(9,1,0),sb,SEQUENCE(1,3,3,3),col,INDEX(RANDARRAY(3,3),MOD(sa,3)+1,QUOTIENT(sa,3)+1),
sortcol,SORTBY(col,QUOTIENT(sa,3),1,col,1),INDEX(sortcol,sb))
矩形数组最大列的一般形式(例如 4 行乘 3 列)
=LET(arr,A1:C4*1,r,ROWS(arr),c,COLUMNS(arr),sa,SEQUENCE(r*c,1,0),sb,SEQUENCE(1,c,r,r),col,
INDEX(arr,MOD(sa,r)+1,QUOTIENT(sa,r)+1),sortcol,SORTBY(col,QUOTIENT(sa,r),1,col,1),INDEX(sortcol,sb))
对于 min,只需更改排序顺序:
=LET(arr,A1:C4*1,r,ROWS(arr),c,COLUMNS(arr),sa,SEQUENCE(r*c,1,0),sb,SEQUENCE(1,c,r,r),col,
INDEX(arr,MOD(sa,r)+1,QUOTIENT(sa,r)+1),sortcol,SORTBY(col,QUOTIENT(sa,r),1,col,-1),INDEX(sortcol,sb))
矩形数组最大行数的一般形式
=LET(arr,A1:C4*1,r,ROWS(arr),c,COLUMNS(arr),sa,SEQUENCE(r*c,1,0),sb,SEQUENCE(r,1,c,c),col,
INDEX(arr,QUOTIENT(sa,c)+1,MOD(sa,c)+1),sortcol,SORTBY(col,QUOTIENT(sa,c),1,col,1),INDEX(sortcol,sb))
再次为 min 更改排序顺序:
=LET(arr,A1:C4*1,r,ROWS(arr),c,COLUMNS(arr),sa,SEQUENCE(r*c,1,0),sb,SEQUENCE(r,1,c,c),col,
INDEX(arr,QUOTIENT(sa,c)+1,MOD(sa,c)+1),sortcol,SORTBY(col,QUOTIENT(sa,c),1,col,-1),INDEX(sortcol,sb))