Перевести формулу массива Excel в VBA - PullRequest
0 голосов
/ 28 февраля 2019

Я делаю календарь с различными событиями.Для этого у меня есть следующая формула для поиска нескольких совпадений с несколькими условиями:

=IFERROR(INDEX(Returnarray, SMALL(IF(Value1 & Value2=Lookuparray1&Lookuparray2, ROW(Returnarray)-MIN(ROW(Returnarray))+1,""), ROW()-Offset)),""))

Я хотел бы перевести эту формулу в функцию VBA, но не могу получить ее вРабота.Я пробовал с Evaluate и с appication.worksheetfunction, но безуспешно.

Function MultipleLookup(Offset As Integer, ReturnArray As Range, Value1 As Range, Lookuparray1, Value2 As Range, Lookuparray2 As Range)
    MultipleLookup = Evaluate("=IFERROR(INDEX(Returnarray, SMALL(IF(Value1 & Value2=Lookuparray1&Lookuparray2, ROW(Returnarray)-MIN(ROW(Returnarray))+1,""), ROW()-Offset)),""))")
End Function

Я также пытался изменить формулу и использовать совпадение вместо if, но тогда это дает мне только первое совпадение.

Может кто-нибудь помочь мне заставить его работать?Возможно ли иметь функцию с переменным количеством критериев?

Спасибо

1 Ответ

0 голосов
/ 28 февраля 2019

Ваша Evaluate функция представляет собой целую строку прямо сейчас, и она не использует переменные.Попробуйте что-то вроде этого:

MultipleLookup = Evaluate("=IFERROR(INDEX(" & Returnarray.Address & ", SMALL(IF(" & Value1.Address & " & " & Value2.Address & "=" & Lookuparray1.Address & "&" & Lookuparray2.Address & ", ROW(" & Returnarray.Address & ")-MIN(ROW(" & Returnarray.Address & "))+1,""), ROW()-" & Offset & ")),""))")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...