2

Index/MatchVBAで数式を効果的に使用するには?

背景: 特定の名前をその名前の範囲に一致させ、特定の日付をその日付の範囲に一致させることに基づいて出力を取得する数式の使用に大きく依存するワークシートがあります。

=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) 各範囲 (名前の範囲、日付の範囲) を選択できる関数を作成したいと考えています。および出力範囲)。基本的に =examplefunction(name value, name range, date value, date range, output range) を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 のスキルをはるかに上回っています。

4

1 に答える 1