在多栏vba excel上搜索

在多栏vba excel上搜索,excel,vba,Excel,Vba,我有一份包含数据的文档,我想自动化一项研究 例如,我有 | lastName | firstName | age | result 我想得到结果行,其中lastName=Smith,firstName=Jhon,age=42 我知道如何使用循环实现这一点,但复杂度很高。还有其他解决方案吗?您可以尝试以下数组公式: =INDEX(D2:D10;MATCH(1;(A2:A10="Smith")*(B2:B10="John")*(C2:C11=42);0)) 这是一个数组公式,因此需要Ctrl-S

我有一份包含数据的文档,我想自动化一项研究

例如,我有

| lastName | firstName | age | result
我想得到结果行,其中lastName=Smith,firstName=Jhon,age=42


我知道如何使用循环实现这一点,但复杂度很高。还有其他解决方案吗?

您可以尝试以下数组公式:

=INDEX(D2:D10;MATCH(1;(A2:A10="Smith")*(B2:B10="John")*(C2:C11=42);0))

这是一个数组公式,因此需要Ctrl-Shift-Enter来输入公式。CRondao有一个很好的解决方案,可以返回第一个匹配项,并且可以处理任何数据类型。如果
result
是数字,并且您希望对所有匹配项求和,则此操作将起作用:

=SUMPRODUCT(--($A$1:$A$4="Smith"),--($B$1:$B$4="Jhon"),--($C$1:$C$4=42),$D$1:$D$4)

注意,这不是一个数组公式

在这种情况下,我通常使用
CONCATENATE()
组合值来构建“查找键”。然后,我可以根据需要使用
VLOOKUP()
SUMIF()
返回结果,因为我发现这些函数比范围偏移量/索引/匹配公式直观且易于编写

这是演示工作表的图像,左上角的单元格是“A1”:

如果有多个匹配项,您将立即看到总数。您也可以使用自动过滤器等

以下是过滤器行中的公式:

A3: =CONCATENATE(B3,C3,D3)
E3: =SUMIF($A$5:$A$10,$A$3,E$5:E$10)
F3: =VLOOKUP($A$3,$A$5:$F$10,6,FALSE)
由于
F3
正在使用带有选项
FALSE
VLOOKUP()
,因此它将只返回在列表中找到的第一个结果,否则返回
\N/A

以下是第一行数据中的公式,可以向下复制以覆盖整个范围:

A6: =CONCATENATE(B6,C6,D6)
E6: =IF($A6=$A$3,1,"")
F6: =IF($A6=$A$3,ROW(),"")

你可以用。请参阅my.is
result
numeric,如果是,其他列是否唯一(没有复制的机会),或者如果可以复制,则相应值的总和就是所需的返回结果?