VLookup 然后嵌套 If's

VLookup then nested If's

我有 2 个工作簿,一个名为 schedule,一个名为 AIH。两者都有具有唯一标识符的代理。

在 AIH 工作簿中,我的工作组中的代理人 trained.They 范围从基本、一般、中级、专业、非派遣、HP,MB.If 代理人已接受培训在此,它标有 X。

我希望能够根据两个工作簿中的唯一标识符在计划工作簿上的这些工作组之间拉取 "highest value of training"。

我的嵌套if如下:

=IF([headcount.xlsx]Sheet1!$N="X", _
    [headcount.xlsx]Sheet1!$N,IF([headcount.xlsx]Sheet1!$M="X", _
    [headcount.xlsx]Sheet1!$M,IF([headcount.xlsx]Sheet1!$L="X", _
    [headcount.xlsx]Sheet1!$L,IF([headcount.xlsx]Sheet1!$K="X", _
    [headcount.xlsx]Sheet1!$K,IF([headcount.xlsx]Sheet1!$J="X", _
    [headcount.xlsx]Sheet1!$J,IF([headcount.xlsx]Sheet1!$I="X", _
    [headcount.xlsx]Sheet1!$I,IF([headcount.xlsx]Sheet1!$H="X", _
    [headcount.xlsx]Sheet1!$H,"Not Trained")))))))

所以这会扫过我的单元格以寻找 X 并显示训练有素的最高工作组,因为我会向后扫过列。

问题是我需要执行 vlookup 以匹配列中的唯一标识符,以便我可以根据代理 ID(唯一标识符)提取正确的信息,但我不确定如何按照 vlookup 的要求执行此操作我 return 特定列的值。

对 excel 很陌生,所以回答越详细越好。

提前致谢!

你的公式应该是这样的:

=INDEX([headcount.xlsx]Sheet1!$H:$N,MATCH("Y",INDEX([headcount.xlsx]Sheet1!H:H,MATCH(A2,[headcount.xlsx]Sheet1!A:A,0)):INDEX([headcount.xlsx]Sheet1!N:N,MATCH(A2,[headcount.xlsx]Sheet1!A:A,0))))

其中 A2 是您要在 [headcount.xlsx]Sheet1! sheet 上查找的唯一标识符,[headcount.xlsx]Sheet1!A:A 是 sheet 上的列,其中已找到唯一标识符。

然后可以将其复制到列中。

不确定您是否还需要解释,但无论如何我都会尝试一下。

如果有人发现错误,请告诉我,我会改正。

看"outer"MATCH(),找"Y",定义是...

MATCH(value-to-find,range-to-look-in,[match-type])

有一个键是不存在的——也就是说,@ScottCraner 没有指定 match-type,所以它默认为 1,意思是 return 在这种情况下小于或等于 "Y" 的最大值。在寻找最大值的过程中,它会继续寻找 "Y" 直到用完值,这始终是最右边的列中有 "X" 。它起作用是因为 "X" 小于 "Y",并且您的所有值都是 "X"。虽然它也可以寻找 "X" 而不是 "Y"。 (不确定为什么 Scott 使用 "Y"。)

这就解释了 "outer" MATCH() 正在做什么。但是它在看哪里?

range-to-look由两个INDEX()函数组成,提供范围的[上]左和[下]右。第一个 INDEX() 是 returning H 列中的单元格,该单元格位于具有您要查找的标识符 (A2) 的行中。第二个 INDEX() 是 return 在同一行的第 N 列中的单元格。您会注意到关联的 "inner" MATCH() 函数的 match-type 为 0,这意味着它们会找到第一个完全匹配项。

因此,如果您的标识符 (A2) 出现在第 20 行,则 range-to-look 变为 H20:N20,然后外部 MATCH()在该范围内寻找最右边的 "X",而外部 INDEX() return 对应的 header(H 和 N 之间的顶行)。

你一定不得不使用 IFERROR() 或其他一些 IF 函数来处理根本没有 "X" 的情况,就像你原来的最后一部分公式 ("Not trained").