很多种方法:
如果有新的动态数组公式:
=FILTER(C:C,(A:A=J1)*(B:B=J2))
如果没有,那么:
- 处理数字返回:
如果您的返回值是数字并且匹配是唯一的(数据中只有一个 John Doe),或者如果有多个,您想对返回求和,那么使用 SUMIFS 是最快的方法。
=SUMIFS(C:C,A:A,J1,B:B,J2)
- 使用非数字返回
如果返回不是数字或有倍数,则有两种方法可以获取列表中的第一个匹配项:
一个。辅助列:
在第四列中输入以下公式:
=A1&B1
并复制列表
然后使用索引/匹配:
=INDEX(C:C,MATCH(J1&J2,D:D,0))
湾。数组公式:
如果您不想或无法创建第四列,请使用数组类型公式:
=INDEX(C:C,AGGREGATE(15,6,ROW($A$1:$A$4)/(($A$1:$A$4=J1)*($B$1:$B$4=J2)),1))
数组类型公式需要限制数据集的数据大小。
如果您的数据集定期更改大小,我们可以通过添加更多 INDEX/MATCH 以返回最后一个包含数据的单元格来将上述内容修改为动态:
=INDEX(C:C,AGGREGATE(15,6,ROW($A$1:INDEX($A:$A,MATCH("ZZZ",A:A)))/(($A$1:INDEX($A:$A,MATCH("ZZZ",A:A))=J1)*($B$1:INDEX($B:$B,MATCH("ZZZ",A:A))=J2)),1))
这将允许数据集增长或缩小,并且公式将仅遍历具有数据而不是完整列的那些。
上述方法按Best-Better-Good的顺序设置。
- 在一个单元格中获得多个答案
如果您不想求和,或者返回值为文本并且有多个 John Doe 实例,并且您希望在一个单元格中返回所有值,则:
一个。如果您有 Office 365 Excel,则可以使用 TEXTJOIN 的数组形式:
=TEXTJOIN(",",TRUE,IF(($A$1:$A$4=J1)*($B$1:$B$4=J2),$C$1:$C$4,""))
作为一个数组公式,退出编辑模式时需要使用 Ctrl-Shift-Enter 而不是 Enter 来确认。如果做得正确,那么 Excel 将{}
围绕公式。
就像上面的 AGGREGATE 公式一样,它需要限制在数据集内。范围也可以使用上面的 INDEX/MATCH 函数进行动态化。
湾。如果没有 Office 365 Excel,则将此代码添加到附加到工作簿的模块中:
Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
Dim d As Long
Dim c As Long
Dim arr2()
Dim t As Long, y As Long
t = -1
y = -1
If TypeName(arr) = "Range" Then
arr2 = arr.Value
Else
arr2 = arr
End If
On Error Resume Next
t = UBound(arr2, 2)
y = UBound(arr2, 1)
On Error GoTo 0
If t >= 0 And y >= 0 Then
For c = LBound(arr2, 1) To UBound(arr2, 1)
For d = LBound(arr2, 1) To UBound(arr2, 2)
If arr2(c, d) <> "" Or Not skipblank Then
TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
End If
Next d
Next c
Else
For c = LBound(arr2) To UBound(arr2)
If arr2(c) <> "" Or Not skipblank Then
TEXTJOIN = TEXTJOIN & arr2(c) & delim
End If
Next c
End If
TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
End Function
然后使用如上所述的 TEXTJOIN() 公式。