Как эффективно использовать формулу Index/Match
в VBA?Excel/VBA - Функция соответствия индексов с использованием динамических диапазонов
Фон: У меня есть рабочий лист, который в значительной степени зависит от использования формулы, которая извлекает результат на основе соответствия определенного имени его диапазону имен, а также определенной даты в его диапазоне дат.
=INDEX(OutputRange,MATCH(1,(Name=NameRange)*(Date=DateRange),FALSE),1)
Кроме того, существует жестко закодированы VBA к югу, который производит такой же вывод
Sub ExampleHardCode()
Dim Result As Variant
Result = Evaluate("INDEX($C$4:$C$13,MATCH(1,($G$6=$A$4:$A$13)*($G8=$B$4:$B$13),FALSE),1)")
ActiveCell.Value = Result
End Sub
Вопрос: Я хотел бы, чтобы произвести функцию, которая возвращает тот же результат, что и выше опций, но позволяет пользователь (i) выбирает значения Name и Date, ссылаясь на соответствующие ячейки, и (ii) выбирает каждый диапазон (диапазон имен, диапазон дат и диапазон вывода). По существу использование = examplefunction (имя, диапазон имен, значение даты, диапазон дат, диапазон вывода) в excel.
Я пробовал несколько различных решений, но не имел успеха. Ниже приведен пример того, что я пробовал до сих пор, я думаю, что есть проблема с частью соответствия, так как даже когда я пытаюсь установить диапазоны (с жестко запрограммированными диапазонами), он возвращает ошибку.
Function TestIndexMatch1(NameVal As Variant, DateVal As Date)
Dim NameRng As Range
Dim DateRng As Range
Dim OutputRng As Range
Dim Var1 As Variant 'should this be a range or integer?
Dim Result As Variant
Set NameRng = Range("$A$4:$A$13")
Set DateRng = Range("$B$4:$B$13")
Set OutputRng = Range("$C$4:$D$13")
With Application.WorksheetFunction
Var1 = .Match(1, (NameVal = NameRng) * (DateVal = DateRng), False)
Result = .Index(OutputRng, Var1, 1)
End With
End Function
У меня есть пример книги, если это помогает мне поделиться. Я не уверен, что это очень удобно, но если это так поможет многим пользователям, которые недостаточно знакомы с Excel, чтобы правильно использовать формулу excel. К сожалению, для меня мои навыки excel намного превосходят мои навыки VBA.
спасибо за идею. Я пробовал свой код и лист (соглашения об именах и значениях диапазона) точно так же, как вы его настроили, но я все равно получаю #VALUE! ошибка. Похоже, вы используете международную версию, но я не думаю, что это создало бы ошибку. Любые мысли о том, почему это может не работать для меня? Thx снова! – user2312552
@ user2312552 Повторите попытку, я отредактировал его. – dee
камень твердый !!! Я очень ценю вашу помощь, работает как шарм. – user2312552