2 つの条件が与えられた範囲内の数値を見つけるために、VBA でインデックス マッチの組み合わせを実装しようとしていました。以下は素晴らしいアプローチのようですが、私の入力はExcelからではなく、コード自体で変化する変数からのものです。私の人生では、それを理解することはできませんが、私は初心者です。
Excel / VBA - ダイナミック レンジを使用したインデックス マッチ機能
名前と日付が代わりにローン番号 (1、2、3 など) と日付 (2013 年 6 月 30 日) であり、スプレッドシートではなく VBA コードで生成されている場合はどうなるでしょうか。範囲に移動し、その日付でそのローンの残高を探し、それを変数に保存します
---範囲の定義----------------------------------- ----------------------------------------------
コードについて: Cantidad、ID、および Fecha は、次のように定義された動的範囲です。
With Worksheets("CFs")
Set ID = Range("offset($a$3,4,0,counta($A:$A)-4,1)")
Set Fecha = Range("offset($b$3,4,0,counta($B:$B)-4,1)")
Set Cantidad = Range("offset($f$3,4,0,counta($F:$F)-4,1)")
End With
------------------機能コード---------------------------------- ---------------------------------------- 関数について : dia1 と ID は日付です毎月変化するローン数と、ローンの総数に達するまで一度に 1 つずつループするローン数です。
Public Function TestIndexMatch1(ByRef Cantidad As Range, _
ByRef Prestamo As Integer, _
ByRef Dia1 As Date, _
ByRef ID As Range, _
ByRef Fecha As Range)
Const Template As String = "=INDEX({0},MATCH(1,({1}={2})*({3}={4},{5}))"
Const MATCH_TYPE = 0
On Error GoTo Err_Handler
Err.Number = 0
Dim originalReferenceStyle
originalReferenceStyle = Application.ReferenceStyle
Application.ReferenceStyle = xlR1C1
Dim myFormula As String
myFormula = Replace(Template, "{0}", Cantidad.Address())
myFormula = Replace(Template, "{1}", Prestamo.Address())
myFormula = Replace(Template, "{2}", Dia1.Address())
myFormula = Replace(Template, "{3}", ID.Address())
myFormula = Replace(Template, "{4}", Fecha.Address())
TestIndexMatch1 = Application.Evaluate(myFormula)
Err_Handler:
If (Err.Number <> 0) Then MsgBox Err.Description
Application.ReferenceStyle = originalReferenceStyle
End Function