Excel 中的复杂查找函数使用 4 个不同的查找参数

Complex Lookup Function in Excel using 4 different lookup parameters

我正在 excel 数据库中处理一个项目,我试图匹配 4 个不同的属性,它们都有自己的列(A、B、C、D),以在不同的数据库中找到相应的值页(Sheet2!)。一个 sheet 2 值再次在它们自己的列 (B、C、D、E) 中找到,如果所有值都匹配,那么我想要列 A Sheet2 中的值!显示在 sheet1!

的 E 列中

问题是 Sheet1 上的值经常倍增!将能够匹配 Sheet2 上多达 12 个不同的唯一行!在 VBA 中只有中等经验,这使得这变得异常困难。可以有匹配所有条件的重复项。当发生这种情况时,我想 return 第一个匹配的项目,只要之前没有对该项目进行匹配。

为了向您提供更多信息,我们为产品提供了不同的值,这些值根据它们的速度指定它们所属的位置。这已将它们拆分为 Section#、ShelvingType、Verticle 和 Horizo​​ntal Location。我们希望将这些值与我们之前存在的具有相应(匹配)数字或文本值的位置的值相匹配。

更详细地说,在 sheet 上,我们的产品具有关于它们应该去向的价值。一个 sheet 两个具有预先存在的产品可以去的位置,这些位置具有代表该位置的值。因此,我们希望将产品新位置值从第一页中取出,并匹配第二页上的现有位置值。问题是对于每个位置,最多有 12 种产品可以到达那里。所以,我们想按顺序说 product1 进入具有匹配值的第一个位置,而 product2 进入具有匹配值的下一个位置,依此类推第四

假设您的数据从第二行开始(标签的第一行):

{MATCH(A1&B1&C1&D1,B2:B100&C2:C100&D2:D100&E2:E100,0)}

以上是数组公式,不用输入大括号{。 只需在输入公式

后按 Ctrl + Shift + Enter

More info

已编辑以删除以前的回复

根据您的进一步阐述,如果我理解正确,我同意@Aaron Contreras 留下的评论。您应该创建显示 'unique ID' 的辅助列,其中所有条件都匹配,以及一个额外的辅助列,该辅助列随着找到更多具有相同条件代码的项目而增加。这将成为该项目的 'ultra-unique' ID。

在这一点上,我认为数组公式是不可能的,尽管我会留下提供第一个匹配条件 结果的答案,而不进一步消除 'previously used' 结果。这可能会进一步完善,但我怀疑它会比简单地使用我在下面的回复中显示的辅助列更优雅。至少,我想不出如何优雅地做到这一点。

总结我的假设:

-您可用的space在sheet1; A 列包含类似于可用位置 space 的内容,B-E 列包含将存储在那里的任何内容的标准。 -您要放置在某个位置的新物品列表在 sheet2 中; columnA 将是我们的公式所在的位置,显示放置该项目的可用位置。

在 Sheet1 上输入 在 sheet1 的 F 列中,向下拖动此公式:

=B1&C1&D1&E1 This will create a unique ID key to be searched in the future.

但是,由于 sheet1 上的相同条件会有多次匹配(因为多个位置可以保存相同的东西),我们需要通过显示多少来使每一行 'more unique'条件组合已经发生的次数。因此,该公式将进入 sheet1 的 G 列,从单元格 G1 开始并向下拖动:

=F1&countif($F:F1,F1) As you drag it down, this will count the nth time that the specific combination of criteria has appeared on sheet1.

在 Sheet2 上输入 在 F 和 G 列的 sheet2 中创建相同的列。公式将完全相同,它们将仅引用 sheet2 而不是 sheet1。

那么 sheet2 中 A 列的公式,从 A1 向下拖动,将是:

=index(sheet1!A:A,match(G1,sheet1!G:G,0))

这将找到第一个匹配所有条件的时间 sheet1,第 n 次在 sheet 2 上使用此条件。

如果我遗漏了什么,请告诉我。

未完成的数组法 同样,数组响应是可能的,但对于您的目的来说可能是不必要的;无论如何,您可能应该对所有组合都有一个唯一的 ID。但是,如果你想使用数组方法,你可以这样(不考虑使用多个位置;仅供参考):

在 sheet2 中,在第 1 行使用不同的条件(并向下复制):

=index(Sheet1!A1:A100,match(1,(Sheet1!B1:B100=B1)(Sheet1!C1:C100=C1)(Sheet1!D1:D100=D1)*(Sheet1!E1:E100=E1),0))

这使用 "TRUExTRUE = TRUE; TRUExFALSE = FALSE; FALSExFALSE = FALSE" 的固有布尔逻辑来查找所有条件都匹配的第一行。请注意,我并没有在所有列中都这样做,因为对于数组公式,这是一个重要的资源消耗。