如何有效地使用Index/Match
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)通过引用相应的单元格来选择名称和日期值,以及(ii)选择每个范围(名称范围、日期范围)和输出范围)。本质上是在 Excel 中使用=examplefunction(名称值、名称范围、日期值、日期范围、输出范围)。
我尝试了多种不同的解决方案,但没有成功。下面是我迄今为止尝试过的示例,我认为匹配部分存在问题,因为即使我尝试设置范围(使用硬编码范围),它也会返回错误。
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 技能。