不确定问题到底是什么:
XLOOKUP
非常擅长,并且“原生”(没有“技巧”)。INDEX/MATCH
也这样做,并且与 XLOOKUP
一样原生。VLOOKUP
也做得很好,尽管使用了一个小技巧,对大多数人来说不常见,但使用了“技巧”。所以...问题只是不知道窍门吗?我想如果是这样,那么它可能不会跳出如何使用前两个(也许)。
我稍后会展示这一点。另一个问题是关于 A 列中的项目如何不只出现一次。因此,也许您不想要查找的标准“查找第一个并退出”方法...也许您想查找具有该值的所有行以及所有列。在这种情况下,上述方法都不起作用,因为 Excel 通常无法在其任何查找方法中提供行和列。尽管如此,实际上可以使用
INDEX/MATCH
通过很多技巧来实现它,因为人们将一部分技巧放在 MATCH
一半中,并将一部分放在 INDEX
一半中,而不是将两部分放在一个函数中(这是为什么这个技巧在XLOOKUP
中不起作用:它是一个单一的函数,所以不能分割这个技巧)。
但是,
FILTER
就是为了这个精确目的而创建的,它返回一个二维结果,并且会很好地为你做这件事。它的输出也可以输入到其他函数中(例如)提供单行输出,例如,对它找到的所有行进行求和。
所以你到底需要什么是一个大问题。谁知道,这可能完全是另一回事。
所以,对于
VLOOKUP
:
=VLOOKUP(F2,A2:D10, {2,3,4}, FALSE)
注意到我用空格分隔的参数了吗?列返回参数(第三个)?它不是一个简单的数字,如
2
,而是 Excel 喜欢称之为的 array constant
。该函数将从所有三个列出的列中返回值,按照列号出现的顺序。因此,您可以使用 {4,3,2}
反转它们,并且可以多次返回(例如 {2,3,2,2,2,4}
)。任何产生类似数组的函数也可以,所以 SEQUENCE(1,3,2,1)
会很好地工作。这意味着您可以使用计算来填充所述函数的值并动态生成函数的输出,而不是硬编码(键入)它。(您无法在数组常量中键入计算来工作,甚至不使用 INDIRECT
...如果它是一个数组常量,Excel 会将其永久视为固定文本材料。)
XLOOKUP
“本地”执行此操作,因为它的第三个参数可以是多列范围,并且该范围中每列的值将成为其输出的一部分。没有什么技巧,你只需列出范围即可。所以:
=XLOOKUP(F2,A2:A10, B2:D10)
B2:D10 有三列,因此结果将是具有三列值的行。
继续讨论您实际上想要一个二维数组(返回行和列,而不仅仅是返回单行或单列)。
FILTER
会像这样工作:
=FILTER(B2:D10, A2:A10=F2)
为此,您指定
XLOOKUP
首先使用的范围,然后将其应用于您要测试的任何列中的每一行。您正在查看的列在输出中不是所需的,因此请小心不要将其包含在第一个范围中(因此不是 A2:D10)。仅包含包含您实际希望函数返回的内容的范围。
然后请在测试中使用查找列。在本例中,您正在测试其中的每个值是否与您的查找值匹配或不匹配。 “在幕后”Excel 正在创建一个由 1 和 0 组成的数组常量(Excel 的 TRUE 和 FALSE 值),并将从第一个参数范围中返回任何匹配的相应行(返回 1)。
在这种情况下,“Fabric”出现两次,因此结果中会出现两行。
如果您想进一步处理该信息,只需将其输入适当的函数或公式即可。例如
SUM
。精心设计其形式以匹配您需要完成的任务。例如,将“Fabric”的所有六个返回值求和为一个数字的方式与将三个结果数字的每列返回值求和不同。
最后,永远记住,您可以对许多函数使用数组常量(手动输入的数组常量或以某种方式生成的数组常量)。记住这可能是一件非常有用的事情。