VBA: использование индекса и совпадение с двумя столбцами в качестве критерия (НЕПРЕРЫВНАЯ ПЕРЕМЕННАЯ ОШИБКА) [дубликат]

2
задан jkayani 16 July 2014 в 19:00
поделиться

3 ответа

Вам все равно нужно отправить тело аргумента MATCH в виде строки. «+» Не объединяется.

WorksheetFunction.Match(criteria1 & "&" & criteria2, Range(), 0)

Следует соединить два значения и выполнить совпадение.

0
ответ дан Bmo 26 August 2018 в 16:45
поделиться

Это работает:

Sub dural()
    crit1 = "find "
    crit2 = "happiness"
    N = Application.WorksheetFunction.Match(crit1 & crit2, Range("A1:A10"), 0)
    MsgBox N
End Sub

с, скажем, A3, содержащий:

найти счастье

EDIT # 1:

Рассмотрим случай нескольких критериев в нескольких столбцах. Например:

demo [/g3]

и мы хотим, чтобы VBA получал имя small, black, dog

без VBA в ячейке листа, которую мы можем использовать:

=INDEX(D1:D100,SUMPRODUCT(--(A1:A100="dog")*(B1:B100="small")*(C1:C100="black")*ROW(1:100)),1)

, чтобы получить имя Oscar

, мы можем использовать ту же формулу в VBA

Sub luxation()
    Dim s As String, s2 As String
    s = "INDEX(D1:D100,SUMPRODUCT(--(A1:A100=""dog"")*(B1:B100=""small"")*(C1:C100=""black"")*ROW(1:100)),1)"
    s2 = Evaluate(s)
    MsgBox s2
End Sub
1
ответ дан Gary's Student 26 August 2018 в 16:45
поделиться

Не легко отображает реализацию VBA, но вы можете обмануть бит, используя Evaluate:

Sub Tester()

    Dim v1, v2, f

    v1 = "y"
    v2 = 11

    Sheet1.Names.Add Name:="X", RefersTo:=v1
    Sheet1.Names.Add Name:="Y", RefersTo:=v2

    f = "MATCH(X&Y,$A$2:$A$5&$B$2:$B$5, 0)"

    Debug.Print Sheet1.Evaluate(f)

End Sub

или пропуская имена:

Sub Tester2()

    Const F_TEMPL As String = "MATCH(""{V1}""&""{V2}"",$A$2:$A$5&$B$2:$B$5, 0)"
    Dim v1, v2, f

    f = Replace(F_TEMPL, "{V1}", "x")
    f = Replace(f, "{V2}", 12)

    Debug.Print Sheet1.Evaluate(f)

End Sub
1
ответ дан Tim Williams 26 August 2018 в 16:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: