Excel 中的查找函数

Excel 中的查找函数

这里有一个表格,其中包含每个月的一些产品价格信息,我将按月查找特定 SKU 的价格。

因为有些 SKU 可能有没有价格在特定的月份(如图中的单元格I8),在这种情况下,我会让单元格返回最后一个非空值在行中。

问题是,如果某一行不包含空白值,我使用的公式将无法返回精确值我正在寻找。

我用来返回最后一个非空值的公式:

=LET(fRow,XLOOKUP(A2,A8:A17,C8:N17),XLOOKUP(TRUE,fRow<>"",fRow,,0,-1))

在图像示例中,如果行中没有空白值,我更喜欢单元格D2返回值。1700

抱歉我的英语不好,我希望你们能理解我的要求并帮助我,非常感谢。

答案1

您的公式是一个很好的开始。我相信您需要更新第一个公式,xlookup使其仅返回部分行,而不是整行。因此,您需要弄清楚如何将其合并D1到返回数组中。

话虽如此,以下是我将如何去做我刚才所说的事情:

  1. 重新格式化 D1 中的数据,以便它与在 C7 到 N7 中找到的月份相匹配
  2. 在公式的第一部分中我没有使用 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, ""))

相关内容