是否有 VBA 工作表函数可以让我进行两层搜索?

Is there a VBA worksheet function that will allow me to do a two layer search?

有什么公式可以用来做双层搜索吗?

我希望能够在第三列中收集满足两个条件的任何信息。

  1. 必须是一个地点(在本例中为印度尼西亚)
  2. 必须是特定行业 (FMCG)

这里的例子:

如果行业规模是一个数字字段,您有 2 个选项来获取它。如果没有,那么您只能使用 MATCH 和 INDEX

与MATCH/INDEX:=INDEX($C:$C;MATCH(F17&G17;A2:A11&B2:B11;0))

使用 SUMIFS:=SUMIFS($C:$C;$A:$A;F18;$B:$B;G18)

根据您的 Excel 版本,MATCH 公式可能需要作为数组公式引入,因此您必须按 CTRL+ 引入它SHIFT+ENTER

如果你想要VBA的解决方案,请使用下一个函数:

Function extractIndSize(strCountry As String, strInd As String, rng As Range) As Variant
    Dim i As Long, arr
    arr = rng.value
    For i = 1 To UBound(arr)
        If arr(i, 1) = strCountry And arr(i, 2) = strInd Then
            extractIndSize = arr(i, 3): Exit Function
        End If
    Next i
End Function

可以通过以下方式进行测试:

Sub testExtractIndustrySize()
  Dim sh As Worksheet, lastR As Long, rng As Range
  
  Set sh = ActiveSheet
  lastR = sh.Range("A" & sh.rows.count).End(xlUp).Row
  Set rng = sh.Range("A2:C" & lastR)
  
  MsgBox extractIndSize("Indonesia", "FMCG", rng)
End Sub

该函数也可以从单元格调用(作为 UDF),使用下一个公式:

 =extractIndSize(E2,F2,A2:C11)

其中"E2"必须引入国家名称,"F2"必须引入行业名称,第三个参数为要处理的范围(光标选中),