как перевести функцию INDEX (MATCH ... в код VBA - PullRequest
2 голосов
/ 04 октября 2019

Я пытаюсь использовать функцию индекса и сопоставления, чтобы найти значение в таблице

В Excel я использую следующую функцию:

=INDEX('Mi Guia.xls'!STACKED;MATCH(I12;PUERTO;0);MATCH(I10;TARJETA;0))

, ноЯ не знаю, как применить его на VBA, поэтому я был бы признателен за вашу помощь

Ответы [ 2 ]

2 голосов
/ 05 октября 2019

Примерно так (может потребоваться небольшая корректировка, поскольку мы не видим определения для ваших именованных диапазонов)

Dim m1, m2

m1 = Application.Match(Range("I12").Value,Range("PUERTO"), 0)
m2 = Application.Match(Range("I10").Value,Range("TARJETA"), 0)

if not iserror(m1) and not iserror(m2) then
    debug.print workbooks("Mi Guia.xls").Range("STACKED").cells(m1, m2).Value
end if
0 голосов
/ 05 октября 2019

Есть несколько способов сделать это. Из cleanest one:

Для самого грязного один:

  • положить формулу в Excel и перевести ее встрока. Затем объедините строку и измените строку, содержащую переменные. Это то, что можно использовать. Выберите ячейку с формулой и запустите ее:

Public Sub PrintMeUsefulFormula()

    Dim selectedFormula  As String
    Dim parenthesis  As String

    parenthesis = """"

    selectedFormula = Selection.Formula
    selectedFormula = Replace(selectedFormula, """", """""")

    selectedFormula = parenthesis & selectedFormula & parenthesis
    Debug.Print selectedFormula

End Sub

Затем возьмите напечатанную строку в ближайшем окне и отошлите ее к ячейке следующим образом:

Worksheets(1).Range("A5").Formula = printedString

Если строка выглядит следующим образом: "=INDEX(A1:J5,MATCH(1,E1:E5),MATCH(3,A3:J3))" и вам нужно изменить 3 второго совпадения на переменную a, то что-то вроде этого работает:

ws.Range("A5").Formula = "=INDEX(A1:J5,MATCH(1,E1:E5),MATCH(" & a & ",A3:J3))"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...