我试图在 VBA 中实现索引匹配组合,以在给定 2 个条件的范围内找到一个数字。下面似乎是一个很好的方法,但是,我的输入不是来自 excel,而是来自代码本身发生变化的变量。对于我的生活,我无法弄清楚,但我是一个新手。
如果您的姓名和日期是贷款编号(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 是一个日期每月更改一次,贷款编号每次循环一次,直到达到贷款总数。
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