VLOOKUP 不适合,当所需项目不在第一列时,如何获取信息?

VLOOKUP 不适合,当所需项目不在第一列时,如何获取信息?

我有一张 Excel 表:

代码 姓名 状态 颜色 连续波 国家
XX12345 约翰 多伊 MI 蓝色的 连线 2 美国 1990
XX122222 杰克 灰色的 加州 蓝色的 连线 2 美国 1990
YZ55567 皮特 诺曼 C 黄色的 连线 2 美国 1992
JJ38459 麦克风 格利 加州 绿色的 连线 5 美国 1993
JZ11111 耀西 拉拔器 加州 红色的 连线 7 美国 1993

我想在单独的 Excel 选项卡中创建一个表格,仅显示符合特定要求的内容。我只希望显示当前日历周的条目。

我想使用一个单元格,例如我可以在其中输入连线 7并且只有带有连线 7出現。

我无法重新排列列,所以我猜 Vlookup 不起作用?

最终目标是在第二个 Excel 选项卡中创建一个如下所示的表格:

代码 姓名 评论 1 评论 2 评论 3 连续波
JZ11111 约翰 连线 7

所以在最后的表格中我想要代码姓名连续波和 3 个空白字段。

我可以不使用 Visual Basic 而只使用简单的 Excel 函数来解决这个问题吗?我读过有关 INDEX() 的文章,但不太明白如何使用它来解决这个问题。

谢谢你的帮助Pat

答案1

对此有几种解决方案。我首选的方案是使用以下组合:指数()匹配()。根据您的描述,您希望根据匹配其中一列的值从单行返回一些数据。从以下函数开始MATCH()

=MATCH(A1,Sheet1!F:F,0)

... exceptA1是您输入所需 CW 值的任何单元格,并且Sheet1!F:F是对原始表格中包含所有 CW 值的列的引用。这将为您提供一个数字(指示哪一行具有该值)或一个错误(如果未找到该值)。现在,您可以使用类似下面的方法从该行中提取其他数据:

=INDEX(Sheet1!A:A,$A$2)

... exceptSheet1!A:A是对您要从中提取数据的列的引用,并且A2是包含公式的任何单元格MATCH()。 Index 将查看该列并根据匹配结果从该列表中提取第 n 个项目。 将该公式复制到其他两列并适当更新列引用。


你不需要有一个单独的单元格来记录MATCH()值,但是技术上计算速度更快。你可以像这样组合它们:

=INDEX(Sheet1!A:A,MATCH(A1,Sheet1!F:F,0))

您还可以使用查找()以非常相似的方式。它查找某个范围内的值,然后返回来自不同范围的相应值。例如:

=XLOOKUP($A$1,Sheet1!F:F,Sheet1!A:A,"(CW not found)")

答案2

您可以使用以下任何一种方式。它们都首先创建一个符合您所需结构的虚拟表,然后选择与查找值匹配的行数组。

它们的不幸的方面:我将它们设置为查找,使用单元格 A1 来保存查找值。在撰写此答案之前再次查看问题,看起来(回想起来,相当明显)第一列将由第一列内容的列表或贯穿的列表填充UNIQUE()。因此,每个都需要编辑以不包括第一列。将其分为两部分,然后是最后一部分更改:删除其中对单元格 C1:C3 的任何引用,因为这是第一列,然后更改用于在内部部分拉出所需列的数组常量以解释列集的变化。所以{1,2,7,7,7,6}会变成{1,6,6,6,5}。等等。最后,将 A1 作为查找值更改为对行中第一个单元格的单元格引用。

因此,以下四个公式中的任何一个都可以起作用,都遵循相同的思想:

=IF(VLOOKUP(A1,C1:I3,{1,2,7,7,7,6},FALSE)="","",VLOOKUP(A1,C1:I3,{1,2,7,7,7,6},FALSE))

=IF(INDEX(C1:I3,MATCH(A1,C1:C3,0),{1,2,7,7,7,6})="","",INDEX(C1:I3,MATCH(A1,C1:C3,0),{1,2,7,7,7,6}))

=IF(XLOOKUP(A1,C1:C3,INDEX(C1:I3,SEQUENCE(3),{1,2,7,7,7,6}))="","",XLOOKUP(A1,C1:C3,INDEX(C1:I3,SEQUENCE(3),{1,2,7,7,7,6})))

=VLOOKUP(A1,IFERROR(INDEX((C1:C3,D1:D3,I1:I3,I1:I3,I1:I3,H1:H3),SEQUENCE(3),0,{1,2,7,7,7,6}),""),SEQUENCE(1,6),FALSE)

当然,三个空列是复杂因素。这就是为什么要构建虚拟列(用于实际计算,不会出现在电子表格的任何地方,因此没有辅助列或命名范围)。

所有函数都功能齐全,但我对第一个函数有点依恋,因为它和和VLOOKUP()一样都是老朋友,而对第四个函数,因为我喜欢它使用第四个参数(AREA)来制作由不同且不一定连续的范围组成的表格。最后一个函数将在未来一年半内消失,因为微软最终会让普通民众直接使用新功能来创建真正的数组,所以在这里展示它让我感到一种奇怪的乐趣。它还具有相当可扩展的特性,并且不连续,并且能够将单元格区域用作多个列,这两者都很好。(也可以对行和列参数执行最后一个操作,但实际上没有人这样做。)IF()=INDEX()INDEX()

我也认为第一种是最直接的,这意味着在一两年内更容易理解和维护。

相关内容