Excel VBA技术精讲:Like运算符的高级模式匹配

文摘   2025-01-16 10:01   湖北  

2000元课程

  免费学7天

函数+VBA



一、示例数据准备

首先,让我们准备示例数据表格(Sheet1):


ABCDE
1序号商品编号商品名称单价备注
21A001苹果手机6999热销产品
32B234华为平板3299新品上架
43A002小米手环199促销中
54C789AirPods1288库存紧张
65B110三星手表2399限时特价
76A003iPad Pro6488预售中

二、基础查找示例

1. 查找A开头的商品编号

Sub 查找A编号商品()      Dim 单元格 As Range      Dim 写入行号 As Long  
写入行号 = 2 '从第2行开始写入结果
With Sheet1 '清空F列原有内容 .Range("F:F").ClearContents
'写入表头和序号 .Range("F1").Value = "查找结果" .Range("F2:F7").Value = .Range("A2:A7").Value
'在B列查找A开头的商品编号 For Each 单元格 In .Range("B2:B7") If Not IsEmpty(单元格) Then If CStr(单元格.Value) Like "A*" Then .Cells(写入行号, 6).Value = .Cells(单元格.Row, 1).Value & " - " & 单元格.Value 写入行号 = 写入行号 + 1 End If End If Next End With End Sub

运行结果:


F
1查找结果
21 - A001
33 - A002
46 - A003


2. 查找包含"手"字的商品名称

Sub 查找手字商品()      Dim 单元格 As Range      Dim 写入行号 As Long  
写入行号 = 2 '从第2行开始写入结果
With Sheet1 '清空F列原有内容 .Range("F:F").ClearContents
'写入表头和序号 .Range("F1").Value = "包含'手'的商品" .Range("F2:F7").Value = .Range("A2:A7").Value
For Each 单元格 In .Range("C2:C7") If Not IsEmpty(单元格) Then If CStr(单元格.Value) Like "*手*" Then .Cells(写入行号, 6).Value = .Cells(单元格.Row, 1).Value & " - " & 单元格.Value 写入行号 = 写入行号 + 1 End If End If Next End With End Sub

运行结果:


F
1包含'手'的商品
21 - 苹果手机
35 - 三星手表

三、高级查找示例

1. 查找特定价格范围商品

Sub 查找价格范围()      Dim 单元格 As Range      Dim 写入行号 As Long  
写入行号 = 2 '从第2行开始写入结果
With Sheet1 '清空F列原有内容 .Range("F:F").ClearContents
'写入表头和序号 .Range("F1").Value = "1000-3000元商品" .Range("F2:F7").Value = .Range("A2:A7").Value
For Each 单元格 In .Range("D2:D7") If Not IsEmpty(单元格) Then If 单元格.Value >= 1000 And 单元格.Value <= 3000 Then .Cells(写入行号, 6).Value = .Cells(单元格.Row, 1).Value & " - " & _ .Cells(单元格.Row, 3).Value & " - " & 单元格.Value 写入行号 = 写入行号 + 1 End If End If Next End With End Sub

运行结果:


F
11000-3000元商品
24 - AirPods - 1288
35 - 三星手表 - 2399

2. 复合条件查找

Sub 复合条件查找()      Dim 单元格 As Range      Dim 写入行号 As Long      Dim 商品编号 As String      Dim 商品价格 As Double  
写入行号 = 2 '从第2行开始写入结果
With Sheet1 '清空F列原有内容 .Range("F:F").ClearContents
'写入表头和序号 .Range("F1").Value = "A开头且价格>5000的商品" .Range("F2:F7").Value = .Range("A2:A7").Value
For Each 单元格 In .Range("B2:B7") If Not IsEmpty(单元格) Then 商品编号 = CStr(单元格.Value) 商品价格 = .Cells(单元格.Row, 4).Value
If 商品编号 Like "A*" And 商品价格 > 5000 Then .Cells(写入行号, 6).Value = .Cells(单元格.Row, 1).Value & " - " & _ 商品编号 & " - " & .Cells(单元格.Row, 3).Value & " - " & 商品价格 写入行号 = 写入行号 + 1 End If End If Next End With End Sub

运行结果:


F
1A开头且价格>5000的商品
21 - A001 - 苹果手机 - 6999
36 - A003 - iPad Pro - 6488

四、优化建议

记得在代码开始时关闭屏幕更新,结束时打开:

Application.ScreenUpdating = False  '代码主体  Application.ScreenUpdating = True

总结

通过添加行号和表头,使示例数据和查找结果更加规范和清晰。在实际应用中,建议:

  1. 保持数据表格结构统一,包含序号列

  2. 结果输出时包含原始序号,便于追踪

  3. 适当添加格式化,提高可读性

  4. 考虑添加错误处理机制

  5. 注意性能优化

希望这些示例能帮助你更好地理解和使用Like运算符!如果有任何问题,欢迎在评论区交流!

记不住代码不妨试试VBA代码助手

vba代码助手(vbayyds.com)

 AI写代码, 代码翻译, 一键混淆加密,中文输入提示

只用1招 让AI编写VBA代码的准确率提高2倍


买课程可进永久答疑群,课程可免费试学点击下方链接 v.excel880.com



2000元课程

  免费学7天

函数+VBA




EXCEL880
Excel/WPS办公技巧分享 郑广学VBA/VSTO/JSA教程分享 课程咨询及付费定制表格加EXCEL880B
 最新文章