Таблица Excel VBA, функция соответствия индекса с массивом - PullRequest
0 голосов
/ 05 мая 2020

Есть ли способ заставить VBA исключать формулы массива с INDEX MATCH при использовании функции .worksheet?

Моя первая формула работает, поскольку я предполагаю, что это не массив?

Этот код работает

Dim VType As string
VType = Application.WorksheetFunction.Index(Sheets(sheetname).Range("$B:$B"), Application.WorksheetFunction.Match("*" & VendorCode & "*", Sheets(sheetname).Range("$A:$A"), 0), 1)

Но затем, когда я добавляю второе совпадение, я получаю ошибку: Несоответствие типов

Dim RetORWaste As String
RetORWaste = Application.WorksheetFunction.Index(Sheets(wsMaster.Name).Range("$F:$F"), Application.WorksheetFunction.Match(("*" & VendorCode & "*") & ("*" & VRegion & "*"), (Sheets(wsMaster.Name).Range("$B:$B")) & (Sheets(wsMaster.Name).Range("$C:$C")), 0), 1)

И имя листа, и wsMaster.name являются строками. WsMaster.Name также получает правильное имя листа. Значит, это должен быть массив?

1 Ответ

2 голосов
/ 05 мая 2020

Если я правильно понимаю, вы хотите выполнить «совпадение двух столбцов», как здесь: https://www.excel-easy.com/examples/two-column-lookup.html

Sub tester()

    Dim RetORWaste As String, wsMaster As Worksheet, m, f
    Dim VendorCode, VRegion

    Set wsMaster = ActiveSheet

    VendorCode = "A"
    VRegion = "B"

    f = "=MATCH(""*{vend}*""&""*{region}*"",B:B&C:C,0)"
    f = Replace(f, "{vend}", VendorCode)
    f = Replace(f, "{region}", VRegion)

    m = wsMaster.Evaluate(f) '<<do not use Application.Evaluate here, or the
                             '  formula will evaluate in the context of the 
                             '  active sheet, which might not be wsMaster

    If Not IsError(m) Then
        'got a match so get the value from col F
        RetORWaste = wsMaster.Cells(m, "F")
        Debug.Print RetORWaste
    End If

End Sub
...