在 VBA 中使用 VlookUp 从下到上搜索
Using VlookUp in VBA to search from bottom to top
我在一个更大的宏中使用了一段 VBA 来备份一些评论。
返回这些评论时,我在 VBA 中使用 Vlookup。问题是,Vlookup 从上到下搜索。我想扭转这一局面,让它从下到上搜索。我将如何实现这一目标?
我 运行 没有 Google 个选项。
尝试从中吸取教训,所以请尽可能解释您的解决方案。
确切地说,我正在使用下面添加的代码:
Dim Dept_Row As Long
Dim Dept_Clm As Long
Table1 = Sheets("16-Compliancy-Rebuild").Range("D85:D750")
Table2 = Sheets("OpmerkingBackup").Range("B2:F750")
Dept_Row = Sheets("16-Compliancy-Rebuild").Range("H85").Row
Dept_Clm = Sheets("16-Compliancy-Rebuild").Range("H85").Column
For Each cl In Table1
Sheets("16-Compliancy-Rebuild").Cells(Dept_Row, Dept_Clm) = Application.WorksheetFunction.VLookup(cl, Table2, 5, False)
Dept_Row = Dept_Row + 1
Next cl
因此,您可以使用 .Find
而不是使用 VlookUp
。使用此功能可以明确搜索方向,xlPrevious
将从下到上搜索。唯一的区别在于返回值,它返回匹配的单元格。 Match (rng.Row
) 的行现在可用于从右列获取数据集。
Dim sht As Worksheet, sht As Worksheet
Set sht = Sheets("16-Compliancy-Rebuild")
Set sht2 = Sheets("OpmerkingBackup")
Dim Dept_Row As Long
Dim Dept_Clm As Long
Dim rng As Range
Table1 = sht.Range("D85:D750")
Table2 = sht2.Range("B2:B750")
Dept_Row = sht.Range("H85").Row
Dept_Clm = sht.Range("H85").Column
For Each cl In Table1
Set rng = Table2.Find(cl, SearchDirection:=xlPrevious, LookAt:=xlWhole)
If Not rng Is Nothing Then
sht.Cells(Dept_Row, Dept_Clm) = sht2.Cells(rng.Row, 6).Value
End If
Dept_Row = Dept_Row + 1
Next cl
除此之外,我还为工作表使用了变量,以使其更易于更改和查看。
我在一个更大的宏中使用了一段 VBA 来备份一些评论。 返回这些评论时,我在 VBA 中使用 Vlookup。问题是,Vlookup 从上到下搜索。我想扭转这一局面,让它从下到上搜索。我将如何实现这一目标? 我 运行 没有 Google 个选项。 尝试从中吸取教训,所以请尽可能解释您的解决方案。
确切地说,我正在使用下面添加的代码:
Dim Dept_Row As Long
Dim Dept_Clm As Long
Table1 = Sheets("16-Compliancy-Rebuild").Range("D85:D750")
Table2 = Sheets("OpmerkingBackup").Range("B2:F750")
Dept_Row = Sheets("16-Compliancy-Rebuild").Range("H85").Row
Dept_Clm = Sheets("16-Compliancy-Rebuild").Range("H85").Column
For Each cl In Table1
Sheets("16-Compliancy-Rebuild").Cells(Dept_Row, Dept_Clm) = Application.WorksheetFunction.VLookup(cl, Table2, 5, False)
Dept_Row = Dept_Row + 1
Next cl
因此,您可以使用 .Find
而不是使用 VlookUp
。使用此功能可以明确搜索方向,xlPrevious
将从下到上搜索。唯一的区别在于返回值,它返回匹配的单元格。 Match (rng.Row
) 的行现在可用于从右列获取数据集。
Dim sht As Worksheet, sht As Worksheet
Set sht = Sheets("16-Compliancy-Rebuild")
Set sht2 = Sheets("OpmerkingBackup")
Dim Dept_Row As Long
Dim Dept_Clm As Long
Dim rng As Range
Table1 = sht.Range("D85:D750")
Table2 = sht2.Range("B2:B750")
Dept_Row = sht.Range("H85").Row
Dept_Clm = sht.Range("H85").Column
For Each cl In Table1
Set rng = Table2.Find(cl, SearchDirection:=xlPrevious, LookAt:=xlWhole)
If Not rng Is Nothing Then
sht.Cells(Dept_Row, Dept_Clm) = sht2.Cells(rng.Row, 6).Value
End If
Dept_Row = Dept_Row + 1
Next cl
除此之外,我还为工作表使用了变量,以使其更易于更改和查看。