根据 =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 使用上面的代码:
- 代码Table
Check
ThingToFind
Code Output
Use 1
FOO
ABC
Use 3
BAR
012
Use 4
BAZ
IN
Unknown
- Table2
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 而不是每次都使用公式),但我似乎无法对初始 =VLOOKUP
的 COL_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
轻松地更改目标范围。
总结:
我需要根据 =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 使用上面的代码:
- 代码Table
Check | ThingToFind | Code Output |
---|---|---|
Use 1 | FOO | ABC |
Use 3 | BAR | 012 |
Use 4 | BAZ | IN |
Unknown |
- Table2
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 而不是每次都使用公式),但我似乎无法对初始 =VLOOKUP
的 COL_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
轻松地更改目标范围。