答案1
选项1:
要解决这个问题,你需要一个辅助细胞设置您想要使用的代码的选择。
在单元格中写入此公式F10
。
=IFERROR(INDEX($A$3:$A$6,IF($C$9=1,MATCH($D$10,$D$3:$D$6,0),IF($C$9=2,MATCH($D$10,$G$3:$G$6,0)))),"Wrong Code")
怎么运行的:
- 在辅助单元格中
C9
,写下您的选择 1 或 2。 Sub Code
在单元格中写入D10
。- 公式将
Sub Code
在Column D
if中搜索C9 has 1
,否则Sub Code
检查Column G.
- 如果你在单元格中设置了错误的组合
C9
,D10
那么公式将返回错误代码错误。
編輯:
选项 2:
此数组公式也可以在单元格中使用F10
。
{=IFERROR(INDEX($A$3:$A$6,MATCH(1,($D$3:$D$6=$D$10)+($G$3:$G$6=$D$10),0)),"Wrong Code")}
笔记,
- 用 完成上面写的公式
Ctrl+Shift+Enter
。 - 在与选项 2 不需要在 Helper Cell 中写入 Value
C9
,只需Sub Code
在 Cell 中写入D10
。
根据需要调整公式中的单元格引用。
答案2
=IFERROR(INDIRECT("A"&IF(SUMPRODUCT(--($D$2:$D$5=$E$8),ROW($A$2:$A$5))=0, SUMPRODUCT(--($G$2:$G$5=$E$8),ROW($A$2:$A$5)), SUMPRODUCT(--($D$2:$D$5=$E$8),ROW($A$2:$A$5)))), IF(E8="","","Invalid code"))
我承认,它不是最短的,但在我看来它是最稳定的。Fixer1234 承认他的代码不太优雅,而 Rajesh 使用了辅助单元格,这不是最佳实践,因为 Excel 不是为它们设计的,当你处理更复杂的项目时可能会导致循环引用。
不过,回到我的公式。
怎么运行的
SUMPRODUCT(--($D$2:$D$5=$E$8),ROW($A$2:$A$5)
:检查 D 列是否包含匹配项。如果包含,则返回匹配项的行号。如果未找到匹配项,则返回 0。
SUMPRODUCT(--($G$2:$G$5=$E$8),ROW($A$2:$A$5)
:检查 G 列是否包含匹配项。如果包含,则返回匹配项的行号。如果未找到匹配项,则返回 0。
IF(...=0, ..., ...)
:检查 D 列的搜索是否返回 0,即无匹配项。在这种情况下,它返回 G 列的结果。否则,它仅返回 D 列的结果。
INDIRECT("A"&...)
:行号从 SUMPRODUCT
s(或 0,如果没有匹配)与“A”组合 - 第一列的字母。 INDIRECT
然后,函数会查找具有该引用的单元格。例如,它可以找到名为“A3”的单元格,或者,如果未找到匹配项,则找到“A0” - 一个不存在的单元格。
IFERR(..., ...)
:检查并处理错误。如果 D 列不包含匹配项,则它将返回对 G 列的搜索。但是,如果 G 列也不包含任何内容,则“A0”将直接传递给 INDIRECT
函数,它不是真正的单元格。因此,它将导致错误,并且它将运行错误处理程序而不是显示错误。
IF(E8="","","Invalid code"))
:处理错误。如果输入单元格为空,则也保持空白,因为无需大惊小怪。但是,如果它不为空,但仍有错误,则返回'无效的代码',因为它只能意味着输入了某些内容,并且这些内容无效。
例子
功能上:
空输入:
输入无效:
答案3
VLOOKUP 需要搜索最左边的列,所以这行不通。INDEX + MATCH 可以工作,但 MATCH 不能搜索多个或二维范围。一种解决方法是将多个 MATCH 组合到不同的范围内。
E7 中的查找结果使用以下公式:
=IFERROR(INDEX(A2:A5,IFERROR(MATCH(E8,D2:D5,0),0)+IFERROR(MATCH(E8,G2:G5,0),0)),"Invalid Sub_code")
每列都有自己的匹配项。匹配项只会出现在一列中,因此如果该列没有匹配项,IFERROR 将返回零。然后添加匹配值将合并匹配列的位置索引和任何其他搜索列的零。问题标题说“两列或更多列”。只需为每个附加列添加另一个 MATCH 表达式即可扩展这一点。
INDEX 被其自己的 IFERROR 包裹,以防输入错误的 Sub_code。MATCH 不区分大小写,因此只要大小写不同,它仍会找到匹配项。
当然,您可以有多个输入单元格和相应的结果单元格。
选择
@Rajesh S 注意到这也可以重组:
=IFERROR(INDEX(A2:A5,MATCH(E8,D2:D5,0)),IFERROR(INDEX(A2:A5,MATCH(E8,G2:G5,0)),"Invalid Sub_code"))
这将使用带有 INDEX 的每个 MATCH 表达式。INDEX 上的 IFERROR 还会处理任何 MATCH 错误。然后 IFERRORS 会嵌套,因此第一次查找中的错误会转到第二次查找,而第二次查找中的错误会转到糟糕的 Sub_code 警告。它最终的长度相同,因为虽然 IFERROR 函数计数减少,但 INDEX 函数计数增加。可以通过额外的嵌套来扩展以适应其他列。
使用看起来最直观的版本。
为了比较结构和逻辑,我将公式分解开来。
方案一:
=IFERROR(
INDEX(A2:A5,
IFERROR( MATCH(E8,D2:D5,0) ,0) + IFERROR( MATCH(E8,G2:G5,0) ,0) )
,"Invalid Sub_code")
方案 2:
=IFERROR(
INDEX(A2:A5, MATCH(E8,D2:D5,0) )
,IFERROR(
INDEX(A2:A5, MATCH(E8,G2:G5,0) )
,"Invalid Sub_code") )