Преобразование формулы массива соответствия индексу в VBA

#excel #vba

#Excel #vba

Вопрос:

 =INDEX(Engine!$AL$12:$AL$17,MATCH($F21,{40;39.9;19.9;14.9;2.9;1},-1))
 

.
Я пытаюсь преобразовать приведенную выше формулу в VBA, это формула сопоставления индексов с таблицей ниже. Если значение $F21 равно 21, то формула дает результат 2. В VBA, если переменная wbcL равна 21, то переменная wbcLscore должна быть равна 2.

введите описание изображения здесь

Я пробовал строку VBA ниже, но она явно неверна и выдает недопустимый символ ошибки в {

 wbcLscore = Application.WorksheetFunction.Index(wseng.Range("AL12:AL17"), Application.WorksheetFunction.Match(wbcL,{40;39.9;19.9;14.9;2.9;1}, -1))
 

Комментарии:

1. Может wbcLscore = Evaluate("=INDEX(Engine!$AL$12:$AL$17,MATCH($F21,{40;39.9;19.9;14.9;2.9;1},-1))") быть? Не тестировалось

2. @FoxfireAndBurnsAndBurns Спасибо, что работает, но возвращает неверный результат 4. Но даже если бы это дало правильный результат, это не помогло бы, поскольку значение моей переменной, wbcL изменяется и не всегда находится в ячейке F21.

3. Как это может вернуть 4, значение в первом столбце наверняка будет 39,9? Я полагаю, вам следует уточнить, что находится в AL12: AL17.

Ответ №1:

Попробуйте что-то вроде этого:

 Sub SubwbcLscore()
    
    'Stuff i needed to make it work.
    Dim wseng As Worksheet
    Dim wbcL As Double
    Dim wbcLscore As String
    Set wseng = ActiveSheet
    wbcL = 40
    
    'Declaration.
    Dim Arr(1 To 6) As Double
    
    'Setting Arr.
    Arr(1) = 40
    Arr(2) = 39.9
    Arr(3) = 19.9
    Arr(4) = 14.9
    Arr(5) = 2.9
    Arr(6) = 1
    
    'Setting wbcLscore.
    wbcLscore = Application.WorksheetFunction.Index(wseng.Range("AL12:AL17"), Application.WorksheetFunction.Match(wbcL, Arr, -1))
    
End Sub
 

Формула та же, она просто использует массив вместо вашего {40;39.9;19.9;14.9;2.9;1} .

Если вам не нужен дополнительный массив, может сработать что-то вроде этого:

 wbcLscore = Application.ExecuteExcel4Macro("INDEX(Engine!R12C38:R17C38,MATCH(Foglio1!R21C6,{40;39.9;19.9;14.9;2.9;1},-1))")
 

Обратите внимание на адреса ячеек: они должны быть в формате R1C1 (как указано в приложении.Выполнить страницу excel4macro). Опять же: массив было бы проще редактировать.