VBA excel – 使用VBA返回列中的最后一个匹配值

基本上,我有一个相当大的(和越来越多)的位置细节,我正在寻找build立一个子例程,一旦位置号码input到相关单元格,将自动填充行中的相应单元格。 VLOOKUP可以很好地做到这一点,除了当一个职位有多行时,它返回最早的一组细节 – 我需要它返回最新的。

我可以使用LOOKUP函数产生我需要的答案,但我似乎无法将函数转换为VBA。

示例查找function:

LOOKUP(D17,1/($D$2:$D$10=D17),E2:E10) 

这是我迄今为止

 Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 4 Then actionrow = Target.Row resulte = Application.WorksheetFunction.Lookup(2, 1 / Range("D2:D10") = Target.Value, Range("E2:E10")) If Target.Value <> "" Then Range("E" & actionrow).formula = resulte End If End If End Sub 

我认为使用Range.Find方法来查看列D的匹配值是可行的 。 从目标单元格开始,并使用SearchDirection:=xlPrevious选项。 总会find一些东西。 如果find的行不是与Target相同的行,则使用列E中的值填充Target的单元格右侧。

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Columns(4), Target) Is Nothing Then On Error GoTo bm_Safe_Exit Application.EnableEvents = True Dim trgt As Range, lastrw As Long For Each trgt In Intersect(Columns(4), Target) lastrw = Columns(4).Find(what:=trgt.Value, after:=trgt, _ lookat:=xlWhole, SearchDirection:=xlPrevious).Row Debug.Print lastrw If lastrw <> trgt.Row Then trgt.Offset(0, 1) = Cells(lastrw, trgt.Column + 1).Value End If Next trgt End If bm_Safe_Exit: Application.EnableEvents = True End Sub 

这应该存活下来将多个值粘贴到列D中。