VBA中Find函数定位列首个匹配项时跳过首行的解决方法
解决VBA Find函数跳过首行匹配的问题
问题原因
Find函数默认会从当前选中单元格的下一个位置开始搜索,如果之前执行过查找操作(哪怕是手动操作),Excel会保留上次的搜索起点,导致跳过A1。另外,若不指定After参数,函数默认以目标区域第一个单元格的下一个位置作为起始点,直接从A2开始搜索。
修正方案
明确指定After参数为目标区域的最后一个单元格,让Find从区域的第一个单元格(A1)开始搜索:
Dim foundCell As Range Set foundCell = Columns(1).Find( _ What:="abc", _ After:=Columns(1).Cells(Columns(1).Cells.Count), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ SearchFormat:=False) If Not foundCell Is Nothing Then Debug.Print foundCell.Row ' 此时会返回1 Else Debug.Print "未找到匹配项" End If
关键说明
After:=Columns(1).Cells(Columns(1).Cells.Count):将搜索起始点设为A列最后一个单元格,配合SearchDirection:=xlNext,会让搜索循环回到A列第一个单元格开始查找。- 必须添加
If Not foundCell Is Nothing的判断,避免找不到匹配项时代码报错。
内容的提问来源于stack exchange,提问作者MrFreeze
相关产品推荐
相关产品推荐

