答案1
答案2
您可以通过FILTER()
提取与产品匹配的表的子集(例如“PS”)并XLOOKUP()
对其进行执行以找到所需的结果来实现它。
假设您的表格在 A1:E19(标题在第 1 行),您的产品输入在单元格 G2 中,您的重量输入在单元格 G3 中。
它将XLOOKUP()
获取 G3 中的值(重量)并在 C 列的数据(fascia gr min)中查找该值。它将获取返回该值的索引值并在 E 列的数据(imponibile)中查找匹配的数据。但是,它不能直接使用主数据表,因为有多个“PS”项,并且它只会返回第一个匹配项。
您可以使用“OG”技术将多个值用作单个查找,以便它能够工作,但现在没有必要,而且那些技术无论如何在精确匹配的情况下效果最好。但事实并非如此。
因此,您需要FILTER()
在公式中构建一个仅包含“PS”项的虚拟表。由于它只包含“PS”项,因此您不会在其中查找“PS”值,因为它们都是与“PS”相关的值。您将查找的内容在虚拟表中将是唯一的,即权重。因此XLOOKUP()
可以很好地帮助您:
=XLOOKUP($G$3,FILTER(C2:C19,B2:B19=$G$2),FILTER(E2:E19,B2:B19=$G$2),,-1)
(不管你信不信,你实际上并不需要对数据表进行排序,因为XLOOKUP()
当它使用数据子集时会有效地(不是真的,但最终结果就像它已经)在内部对其进行排序FILTER()
。)
FILTER()
出现两次,因为它首先提供用于匹配查找值的列以获取其索引(在本例中为相对上/下位置),然后第二次提供用于获取结果值的列。G2 中的值将所选行限制为仅产品(在本例中为 PS)。
您可能觉得可以使用一次,然后指定整个 E2:E19 范围作为结果,但这样做会失败。它必须与查找列的大小相匹配。因此,您需要两个FILTER()
'。
否则,它就非常简单了XLOOKUP()
。您给它一个在单元格 G3 中查找的值、查找范围和要查找并从中获取结果的结果列,以及最后一个细节:您想要找到所寻找的值,或者,如果没有完全匹配(通常不会有),那么下一个实际存在的较小值。因此,执行您提到的搜索,可能只搜索 62,它找不到 62,并查找下一个实际存在的较小值,找到 51 并返回 3.11 欧元。这是通过第五个参数(公式中使用的最后一个参数)完成的:末尾的“-1”。
您可以更巧妙(“更复杂”)地测试重量值,看看它是否超过了 D 列中列出的任何给定产品的最高重量。如果这意味着该商品必须完全不同地定价,或者因此可能是不同的产品,或者其他可能适用的情况,那么这可能很重要。(也许以产品的最高价值作为基础,并根据额外重量的一些成本增加更多。有这么多可能性。)
最后的想法是,这将适用于行数大于 0(无论是 1 还是 100)的产品。
(这一切的绝对关键是确保您呈现XLOOKUP()
两个相同大小的虚拟列。任何时候您执行这样的操作并且失败,忘记这样做是最有可能导致失败的原因。)