如何有效地使用VBA的Index/Match
公式?的Excel/VBA - 使用動態索引匹配功能範圍
背景:我有嚴重依賴於使用檢索基於匹配特定的名稱,以它的名字範圍以及特定日期到其時間範圍的輸出的公式的一個工作表。
=INDEX(OutputRange,MATCH(1,(Name=NameRange)*(Date=DateRange),FALSE),1)
此外,存在產生相同的輸出
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
問題的硬編碼VBA子:我想以產生返回輸出上述選項相同的,但允許功能(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技能。
感謝您的想法。我嘗試了你的代碼和工作表(包括命名約定和範圍值),正如你設置它的時候一樣,但我仍然獲得了#VALUE!錯誤。看起來您正在使用國際版本,但我認爲這不會產生錯誤。任何想法爲什麼它可能不適合我? Thx再次! – user2312552 2013-04-24 22:14:13
@ user2312552請再次檢查答案,我已編輯它。 – dee 2013-04-30 05:59:21
堅如磐石!我非常感謝你的幫助,像一個魅力。 – user2312552 2013-04-30 14:22:57