Найдите ячейку, которая совпадает с текстом «X», затем найдите самую последнюю дату в VBA Excel

#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.