答案1
您的公式是一个很好的开始。我相信您需要更新第一个公式,xlookup
使其仅返回部分行,而不是整行。因此,您需要弄清楚如何将其合并D1
到返回数组中。
话虽如此,以下是我将如何去做我刚才所说的事情:
- 重新格式化 D1 中的数据,以便它与在 C7 到 N7 中找到的月份相匹配
- 在公式的第一部分中我没有使用 xlookup,而是使用了 index/match:
INDEX($C$8:$C$17,MATCH(A3,$A$8:$A$17)):INDEX($C$8:$N$17,MATCH(A3,$A$8:$A$17),MATCH($B$1,$C$7:$N$7))
我不会解释这个公式,而是建议你参考:
https://stackoverflow.com/questions/47187863/can-excels-index-function-return-array
当我将上述内容代入你的公式时,它起作用了:
=LET(fRow,INDEX($C$8:$C$17,MATCH(A3,$A$8:$A$17)):INDEX($C$8:$N$17,MATCH(A3,$A$8:$A$17),MATCH($B$1,$C$7:$N$7)),XLOOKUP(TRUE,fRow<>"",fRow,,0,-1))
答案2
返回0
两者0
和空值
=IFERROR(INDEX(
FILTER(A7:N17, INDEX(A7:N17,,1)=A2),
XMATCH(F1, A7:N7, 0)),"")
返回""
空值
=IFERROR(
IF(LEN(
INDEX(
FILTER(A7:N17, INDEX(A7:N17,,1)=A2),
XMATCH(F1, A7:N7, 0))),
INDEX(
FILTER(A7:N17, INDEX(A7:N17,,1)=A2),
XMATCH(F1, A7:N7, 0)),""),"")
与 LET 相同的公式:
=LET(
range,A7:N17, month,F1, sku,A2,
result, INDEX(
FILTER(range, INDEX(range,,1)=sku),
MATCH(month, CHOOSEROWS(range, 1), 0)),
IF(LEN(result), result, ""))