Я пытался реализовать комбинацию совпадений индекса в VBA, чтобы найти число в диапазоне, заданном 2 условиями. Ниже представлен отличный подход, однако мои входы не исходят из excel, а из переменной, которая меняет сам код. Для жизни я не могу понять это, но я новичок.Соотношение индекса в VBA для диапазонов (поиск баланса кредита с учетом номера кредита и даты)
Excel/VBA - Index Match function using Dynamic Ranges
Что произойдет, если ваше имя и дата вместо ряд кредита (1,2,3 и т.д.) и дата (6/30/2013) и не в таблице, а формируются в 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
Этот код, по-видимому, излишне усложняет ситуацию без необходимости. Не могли бы вы объяснить, что вы хотите сделать именно в простых словах и, в идеале, с примером; например: «Я хочу искать совпадения значения в C12 в столбце X, а затем и т. д.». Имейте в виду, что если вы хотите так сильно полагаться на формулы Excel, вы не должны использовать VBA. – varocarbas