使用Office365 Excel数组公式,如何确定每个人的最小值和最大值?

vngu2lb8  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(189)

给出以下测试数据。如何构造数组公式以产生所需的结果?

=LET(item,G4,name,A4:A7,data,C4:E15,
    names, CHOOSECOLS(data,1),
    items, CHOOSECOLS(data,2),
    cnt,   CHOOSECOLS(data,3),
    mn,    MIN(IF(AND(name=names,item=items,cnt>0),cnt,FALSE)),
    mx,    MAX(IF(AND(name=names,item=items,cnt>0),cnt,FALSE)),
if(and(not(mn),not(mx)),"None",mn&" : "&mx) )

船是在“显示”列中输入的,因此结果应该与船相关。如果将绿色单元格更改为Car,则结果应仅显示汽车等。

公式位于单元格I4中,生成#N/A。我尝试了一些其他类似的公式,但没有运气到目前为止。

tvokkenx

tvokkenx1#

也许这就是您可以使用MAP()尝试的

·单元格I4中使用的公式

=LET(x,FILTER(HSTACK(C4:C15,E4:E15),G4=D4:D15),
HSTACK(A4:A7,MAP(A4:A7,LAMBDA(m,
LET(y,FILTER(INDEX(x,,2),ISNUMBER(XMATCH(INDEX(x,,1),m)),0),
IF(OR(MIN(y),MAX(y)),MIN(y)&" : "&MAX(y),"None"))))))
cgh8pdjw

cgh8pdjw2#

为了替代,你可以使用MINIFSMAXIFS如果没有匹配的条件,两个函数都返回0,如果我们可以假设0不是一个有效的计数,那么我们可以有这个简单的方法(* 公式1*):

=LET(A,A2:A5, B,B2:B13,C,C2:C13, D,D2:D13, lk,F2, z,MAP(A,LAMBDA(x,
 MINIFS(D,B,x,C,lk) &":"& MAXIFS(D,B,x,C,lk))), HSTACK(A,IF(z="0:0", "None",z)))

注意:可以通过如下方式避免MAP函数(* 公式2*):

=LET(A,A2:A5, AA,TOROW(A), B,B2:B13, C,C2:C13, D,D2:D13, lk,F2, z,TOCOL(
 MINIFS(D,B,AA,C,lk) &":"& MAXIFS(D,B,AA,C,lk)),HSTACK(A,IF(z="0:0", "None",z)))

如果0是一个有效的计数,那么就没有办法区分名称中有船值的情况和有0计数的情况以及没有船的情况。要将0视为有效计数,我们需要采用不同的方法。我们不能使用MAXIFS/MINIFS,因为它们是RACON function,我们需要首先过滤,即输入将是一个数组而不是一个范围(* 公式3*):

=LET(A,A2:A5, B,B2:B13,C,C2:C13, D,D2:D13, lk,F2, x, MAP(A,LAMBDA(w, LET(
 f,FILTER(D,(B=w)*(C=lk), ""),MIN(f) &":"& MAX(f)))),HSTACK(A,IFERROR(x,"None")))

使用FILTER的第三个输入参数和一个文本值,对于不匹配条件MAX/MIN的情况,返回#VALUE!,所以现在我们有一种方法来区分这种情况。最后使用IFERROR将其转换为"None"
下面是使用 * 公式1* 的输出:

查找名称也可以通过UNIQUE(B)获得,我们保持这种方式,因为排序不同。

相关问题