如何修改VBA代码实现从下往上匹配ws.Columns(2)?
VBA从列底部向上精确匹配的代码修改方案
原代码使用Application.Match从ws.Columns(2)的顶部向下查找精确匹配,现在需要改为从该列底部向上查找,我们可以用Range.Find方法实现这个需求,以下是修改后的完整代码及关键说明:
修改后的完整代码
Sub Test() Dim Data, Chk As Variant, ws As Worksheet, i As Long Set ws = Workbooks("Summary.xlsx").Sheets("Correct") With ThisWorkbook.Sheets("Correct").Cells(1).CurrentRegion Data = .Value For i = 2 To UBound(Data) ' 替换原Match语句,改为从列底部向上精确查找 Set Chk = ws.Columns(2).Find(What:=Data(i, 2), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchDirection:=xlPrevious) If Chk Is Nothing Then ' 未找到匹配值的逻辑,和原代码一致 .Cells(i, 1).Resize(, 4).Copy ws.Range("A" & Rows.Count).End(xlUp)(2) ElseIf ws.Cells(Chk.Row, 6) = "OK" Or ws.Cells(Chk.Row, 6) <> "" Then ' 找到匹配值后的判断逻辑,注意用Chk.Row获取行号 .Cells(i, 1).Resize(, 4).Copy ws.Range("A" & Rows.Count).End(xlUp)(2) End If Next i End With End Sub
关键修改说明
- 替换匹配逻辑:把原来的
Application.Match换成Range.Find,通过SearchDirection:=xlPrevious指定从区域底部向上查找,LookAt:=xlWhole保证精确匹配(对应原Match的匹配类型0) - 空值处理:原代码用
IsError(Chk)判断未找到,现在改用Chk Is Nothing(因为Find找不到时返回Nothing) - 行号获取:找到匹配单元格后,用
Chk.Row获取对应的行号,替换原代码中直接使用Chk作为行号的逻辑
内容的提问来源于stack exchange,提问作者Stef
相关产品推荐
相关产品推荐

