Excel VBA如何用Find方法仅匹配单元格前6个字符而非整格
VBA单元格前6位匹配修改方案
核心修改逻辑
原有xlWhole为全单元格内容匹配,xlPart为任意位置包含匹配,均无法满足仅匹配前6位的需求,可通过VBA查找支持的通配符实现要求:将查找值设置为目标内容前6位+通配符*,配合xlWhole参数,即可精准命中单元格前6位匹配的结果。
需修改的核心代码行:
' 原代码 rows = w2.Columns("A:A").Find(What:=aCell, LookAt:=xlWhole).Row ' 修改后代码 rows = w2.Columns("A:A").Find(What:=Left(aCell, 6) & "*", LookAt:=xlWhole).Row
完整修改后代码
Sub test() Dim aCell ' 优化变量声明,避免默认Variant类型问题 Dim A As Long, B As Long, rows As Long Dim w1 As Worksheet, w2 As Worksheet Dim cell As Range Set w1 = Workbooks("Book1").Sheets("Sheet1") Set w2 = Workbooks("Book2").Sheets("Sheet1") A = w1.Cells(w1.Rows.Count, 1).End(xlUp).Row B = w2.Cells(w2.Rows.Count, 1).End(xlUp).Row For Each aCell In w1.Range("A2:A" & A) On Error Resume Next ' 仅修改此行的查找参数即可 rows = w2.Columns("A:A").Find(What:=Left(aCell, 6) & "*", LookAt:=xlWhole).Row On Error GoTo 0 If rows = 0 Then Else w2.Range("B" & rows).Value = aCell.Offset(0, 1).Value End If rows = 0 Next End Sub
补充说明
- 若待查找的
aCell内容本身不足6位,Left函数会自动取全部内容进行匹配,无需额外做长度判断 - 如需开启大小写匹配,可在
Find参数中新增MatchCase:=True,默认不区分大小写 - 原代码中变量声明存在隐式Variant问题,已在修改版中优化,避免潜在运行异常
内容的提问来源于stack exchange,提问作者futureisnow
相关产品推荐
相关产品推荐

