我有一张 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()
我也认为第一种是最直接的,这意味着在一两年内更容易理解和维护。