#excel #vba
#excel #vba
Вопрос:
У меня есть 3 столбца:
Col B: диапазон имен
Таблица: диапазон дат
Col G: значения в долларах
Я хочу, чтобы код помещался в столбец B, совпадал с любым именем, которое я помещаю в ячейку P5, затем в столбце E смотрите, какая последняя дата для этого имени, и возвращайте значение в долларах G. Прямо сейчас у меня есть коды отдельно, но я не знаю, как их объединить:
Function Max_Date()
Max_Date = Application.WorksheetFunction.Max(Columns("Y"))
MsgBox CDate(Max_Date)
End Function
Function FindText()
Dim rngX As Range
Set rngX = ActiveSheet.Range("B:B").Find(Range("P5"), lookat:=xlPart)
If Not rngX Is Nothing Then
MsgBox "Found at " amp; rngX.Address
End If
End Function
Комментарии:
1. это можно сделать с помощью формулы, нужен ли vba?
2. @ScottCraner да, потому что это для других пользователей, которые могут быть не знакомы с Excel
Ответ №1:
Вы могли бы подумать о чем-то в этом направлении:
Public Function GetDollar(NOM) As Double
Dim RNG1 As String, RNG2 As String, RNG3 As String, LR As Double
With ActiveWorkbook.Sheets(1)
LR = .Cells(Rows.Count, 2).End(xlUp).Row
RNG1 = .Range(.Cells(1, 2), .Cells(LR, 2)).Address
RNG2 = .Range(.Cells(1, 3), .Cells(LR, 3)).Address
RNG3 = .Range(.Cells(1, 4), .Cells(LR, 4)).Address
GetDollar = .Evaluate("=INDEX(" amp; RNG3 amp; ",MATCH(""" amp; NOM amp; """amp;MAX((" amp; RNG1 amp; "=""" amp; NOM amp; """)*" amp; RNG2 amp; ")," amp; RNG1 amp; "amp;" amp; RNG2 amp; ",0))")
End With
End Function
Если в вашем случае вы хотите, чтобы были заполнены оба столбца E и G, вам все равно понадобятся два UDF, поскольку вы не можете изменять значения других ячеек с помощью UDF.