0

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
4

1 に答える 1