我需要仅使用一个搜索条件输出一列已排序数据的结果。同一条件有时会出现多次。LOOKUP 仅查找第一次出现的情况。我需要在单元格中输入要匹配的单元格是 J8:J581,要显示的相应数据是 N8:N581
J K L M N
bob RED
bob BLUE
Bob Green
Sue yellow
Sue white
fred grey
pete brown
。
input=bob
output= bob RED
BLUE
Green
答案1
如果您只是希望返回类似上述示例的行,请使用 Excel 表格。
- 选择您的数据
- 创建表格
Insert>Tables>Table
(选中“我的表格有标题”框) - 创建表格后,只需选择过滤按钮(表格标题行中的向下箭头)并选择过滤值(例如,在样本中选择 Bob),这将仅返回“Bob”行。
这是之前的图像:
之后:
编辑: 根据您的补充信息,我会考虑添加一个基于数据表的数据透视表。这将允许您创建信息的“概述”视图,以更好地查看哪些露营地只有一个 ID,哪些有多个 ID。它看起来会像这样:
此外,@pnuts 指出,Excel 下拉列表(即筛选列表)中的项目数限制为 10,000 个,但表格成员数没有记录在案的限制。我的表格有 10,000 行。
编辑2:如果您想要轻松地找到重复的值,那么数据透视表绝对是最佳选择。
- 取出您的初始数据表并添加一个“计数器”行。
=IF([@Name]=D1,F1+1,1)
这将返回具有相同名称的行数。 Insert>Tables>Pivot Table
根据您的数据创建数据透视表。- 像这样格式化数据透视表:
- 行标签 = ,,,
Name
并关闭所有值的小计和总计。Code
Counter
- 过滤计数器 = 清除 1,这将仅显示具有多个值的名称。
- 过滤器名称 = 您感兴趣的任何特定露营地名称。
- 行标签 = ,,,
答案2
假设您的输入单元格是 A1,输出单元格是 A3(用于名称)和 B3:B..(用于输出范围)(B 范围的末尾一直向下到您希望看到的最大结果数)。
对于 A3,输入公式=A1
。
对于 B3,输入公式
=IFERROR(INDEX($N$1:$N$99,SMALL(IF($J$1:$J$99=$A$3,ROW($N$1:$N$99)-ROW($N$1)+1),ROWS($N$1:$N1))),"")
这是一个数组公式,需要使用Control- Shift-Enter组合键输入。然后您可以将其复制到输出范围的底部。
请注意,该公式是针对最多 99 行的输入列表进行硬编码的。您可以将其更改为所需的任何长度。虽然可以引用整个列(J:J 和 N:N),但这可能会对性能造成影响,您可能希望避免这种情况。
公式如何运作
从内向外,该公式首先将要执行查找的姓名(单元格 A3)与完整姓名列表(J1:J99 范围内最多 99 个姓名)进行比较。该比较显示在下方函数分解的第 6 行中。
该比较的产物是一个数组,其中匹配的值为 True,不匹配的值为 False,例如 {False, False, False, False, True, True, False,... 等}。
然后,将该数组与可以视为名称列表的“行号”的数组进行比较:{1、2、3、4、5、6、... 99}。此比较由公式表第 6-8 行中的 IF 语句完成。
比较是逐个元素进行的。如果名称比较数组的元素等于 True,则 IF 返回其对应的行号;如果元素等于 False,则 IF 返回 FALSE。使用上面的两个示例数组,IF 语句的结果将是 {False, False, False, False, 4, 5, False, ...}。
继续,SMALL 函数(从函数大纲的第 8 行开始)用于从 IF 中获取此新数组的第 k 个最小元素。在这种情况下,“k”由表达式 ROWS($N$1:$N1) 提供,当整个公式从第 1 行向下复制到第 99 行时,它将简单地从 1 计数到 99(ROWS($N$1:$N1) = 1、ROWS($N$1:$N2) = 2,依此类推)。
因此,SMALL 将首先找到 IF 生成的数组的最小元素,忽略为 False 的元素。换句话说,它将返回被比较的名称与查找名称列表中的名称匹配的第一个行号。在我们的示例中,即数字 4,如下表第 6 列所示。
总结步骤使用查找值上的 INDEX 来获取与已计算的行号相对应的元素。在本例中,问题的颜色列表示例中的第 4 项是“黄色”。(IFERROR 确保当公式无法找到匹配项时显示空白。)
这是完整公式第一次复制产生的结果。当将其复制到下一个单元格时,计算中唯一发生变化的是 SMALL 函数的“k”值,该值前进到 2。找到的第二小行号是 5,得出的结果是“白色”。