根据 =RIGHT 值的值执行不同的 VLOOKUP

Perform different VLOOKUPs based on value of =RIGHT value

总结:

我需要根据 =RIGHT 语句的结果 =VLOOKUP 不同的列号。我当前的公式按预期执行此操作,但如果我需要添加 =RIGHT 语句的更多潜在结果,则不容易扩展。有什么方法可以有效地扩展它吗?

用例:

我有一个公式可以将 "Use 1""Use 2""Use 3""Use 4""Unknown" 插入列 A。然后 B 列需要执行一次 =VLOOKUP,这将根据 A 和 return 列中最后一个字符的不同列号而有所不同。例如,如果单元格 A1 包含文本 "Use 1",我将需要 return =VLOOKUP 中的第二列。如果单元格 A2 包含 "Use 4",我将需要 return =VLOOKUP 中的第 8 列 (列号是非线性的).

当前代码:

=IFS(RIGHT(A2,1)="1",VLOOKUP(B2,'Table2'!A:I,2,FALSE),RIGHT(A2,1)="2",VLOOKUP(B2,'Table2'!A:I,4,FALSE),RIGHT(A2,1)="3",VLOOKUP(B2,'Table2'!A:I,5,FALSE),RIGHT(A2,1)="4",VLOOKUP(B2,'Table2'!A:I,8,FALSE),RIGHT(A2,1)="N","NotFound")

示例 Table 使用上面的代码:

Check ThingToFind Code Output
Use 1 FOO ABC
Use 3 BAR 012
Use 4 BAZ IN
Unknown
ThingToFind Data1 Data2 Data3 Data4 Data5 Data6 Data7 Data8
FOO ABC DEF GHI JKL MNO PQR STU VWX
BAR 123 456 789 012 345 678 901 234
BAZ SOME THING TO LOOK UP GOES IN HERE

结论:

上面的例子对于之前的用例工作得很好,但我试图使这个可扩展,而不需要在每次 Check 列可能获得新添加时编辑公式(例如 "Use 5""Use 12"。实际上有什么办法吗?我的想法是使用单独的 table 到 =VLOOKUP 列号(所以我只需要编辑这个 table 而不是每次都使用公式),但我似乎无法对初始 =VLOOKUPCOL_INDEX_NUM 部分使用不同的 =VLOOKUP。如有任何帮助,我们将不胜感激。我正在使用 MSO 365。

您的选择似乎完全是任意的,并且由于 'use' 下的选项对那些人来说似乎是线性的,我建议使用 CHOOSE():

C2中的公式:

=IFERROR(VLOOKUP(B2,E:M,CHOOSE(--MID(A2,5,99),2,4,5,8),0),"")

拖累...


这里的逻辑是:

  • --MID(A2,5,99) - 用于从 A-column 中获取号码。这些似乎是线性的(或者如果 'Unknown' 会导致错误)。
  • 上面的结果是CHOOSE()的第一个参数的输入,因为它们是线性的,所以我们可以在第二到第五个参数中写入每个值。如果需要,可以缩放它。
  • VLOOKUP() 按预期工作,现在应该 return 列符合上述结果。
  • IFERROR() 是否可以捕获 'Unknown'.
  • 给出的任何错误

由于 BYROW() 似乎正在生产中,因此添加替代方案来为溢出数组创建单个公式不会有什么坏处。这意味着您只需要调整一个公式:

C2中的公式:

=BYROW(A2:B5,LAMBDA(X,IFERROR(VLOOKUP(INDEX(X,2),E:M,CHOOSE(--MID(INDEX(X,1),5,99),2,4,5,8),0),"")))

顺便说一句,问题写得很好!

有点脏但工作完美:

在您的 Table2 之上,添加一个转置行,其中使用 1、使用 2 ...在您要提取值的位置使用 N。然后结合VLOOKUP和MATCH。

我在D列的公式是:

=VLOOKUP(B3;$A:$I;MATCH(A3;$A:$I;0);FALSE)

您可以将此设置为 IF.ERROR 或 Unknown 选项的 IF。

这种方法的优点是您可以 add/switch 更多 Use N 轻松地更改目标范围。