请求Excel函数高手解答1个问题? 谢谢了!

2024-12-27 19:36:51
推荐回答(2个)
回答1:

这是我看到的第4遍了

不过为什么我回答的第一个问题被你关闭了
这是我的回答
=LOOKUP(MAX(MMULT(N(E1:E5=TRANSPOSE(E1:E5)),5-(LEN(MMULT((A1:D5="")*{10,100,1000,10000},{1;1;1;1}))))),MMULT(N(E1:E5=TRANSPOSE(E1:E5)),5-(LEN(MMULT((A1:D5="")*{10,100,1000,10000},{1;1;1;1})))),E1:E5)

数组公式 CTRL+SHIFT+ENTER结束

思路:求每一行的最后一个空单元格的位置,用此确定第一行X的个数(你的数据除了空就是X),5-(LEN(MMULT((A1:D5="")*{10,100,1000,10000},{1;1;1;1})))返回第一行X个数的一个数组,你的第一例为{1;3;4;2;2}
MMULT(N(E1:E5=TRANSPOSE(E1:E5)),5-(LEN(MMULT((A1:D5="")*{10,100,1000,10000},{1;1;1;1}))))对E列的条件求和,第一例返回{7;5;7;5;7}
后面的LOOKUP和MAX函数就不用说了吧
至于用MMULT条件求和是在EXCELHOME上学的,不是很好理解,不过用于生成内存数组很方便

问题补充:没注意LOOKUP查找需要升序排列的问题,公式已改,还是数组公式
=INDEX(E1:E5,RIGHT(MAX(MMULT(N(E1:E5=TRANSPOSE(E1:E5)),5-(LEN(MMULT((A1:D5<>"X")*{10,100,1000,10000},{1;1;1;1}))))*100+ROW(E1:E5)),2))

你的E中如果只会有数字的话,还可以简成=--RIGHT(MAX(MMULT(N(E1:E5=TRANSPOSE(E1:E5)),5-(LEN(MMULT((A1:D5<>"X")*{10,100,1000,10000},{1;1;1;1}))))*100+E1:E5),2)
数字为两位数以下,若可能超过两位,相应改变公式最后的100和2,看懂了公式应该知道怎么改

没看到你的X相同情况下的判断,已加上=--RIGHT(MAX(MMULT(N(E1:E5=TRANSPOSE(E1:E5)),5-(LEN(MMULT((A1:D5<>"X")*{10,100,1000,10000},{1;1;1;1}))))*1000+COUNTIF(E1:E5,E1:E5)*100+E1:E5),2)

回答2:

=IF(SUMPRODUCT((E1:E5=1)*(A1:D5="X"))-SUMPRODUCT((C1:C5="")*(A1:B5="X")*(E1:E5=1))-SUMPRODUCT((B1:B5="")*(A1:A5="X")*(E1:E5=1))+SUMPRODUCT((C1:C5="")*(B1:B5="")*(A1:A5="X")*(E1:E5=1))=SUMPRODUCT((E1:E5=2)*(A1:D5="X"))-SUMPRODUCT((C1:C5="")*(A1:B5="X")*(E1:E5=2))-SUMPRODUCT((B1:B5="")*(A1:A5="X")*(E1:E5=2))+SUMPRODUCT((C1:C5="")*(B1:B5="")*(A1:A5="X")*(E1:E5=2)),MODE(E1:E5),IF(SUMPRODUCT((E1:E5=1)*(A1:D5="X"))-SUMPRODUCT((C1:C5="")*(A1:B5="X")*(E1:E5=1))-SUMPRODUCT((B1:B5="")*(A1:A5="X")*(E1:E5=1))+SUMPRODUCT((C1:C5="")*(B1:B5="")*(A1:A5="X")*(E1:E5=1))>SUMPRODUCT((E1:E5=2)*(A1:D5="X"))-SUMPRODUCT((C1:C5="")*(A1:B5="X")*(E1:E5=2))-SUMPRODUCT((B1:B5="")*(A1:A5="X")*(E1:E5=2))+SUMPRODUCT((C1:C5="")*(B1:B5="")*(A1:A5="X")*(E1:E5=2)),1,2))