打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA基础入门(32)超越遍历的查找功能

我们先看下面案例:

说明

A列和C列各有自己不同的数据,但是我们可以发现红框内数据有相同的格式,并且有相同的数据。

0
1

目的

1

我们要在A列内查找与C列有相同数据部分的A列数据,把他复制到D列。

2

例如C1单元格内在A列拥有同样数据的单元格应该是A4。

3

我们想要的结果是下面这样的。


思路

●首先,我们要把C列数据截取部分字符串。

参照:VBA基础入门(6)简单的字符串处理函数(1)

●然后,我们可以做一个循环来遍历A列数据

参照:VBA基础入门(15)循环语句

●使用LIKE方法查找数据。

最后,把数据复制到D列。

【代码】

Sub Test1218()
Dim MyStr As String
Dim TempStr As String
Dim RowA As Integer
Dim RowC As Integer
Dim MaxrowA As Integer
Dim MaxrowC As Integer

RowA = 1
RowC = 1

'获取A,C列最大行

MaxrowA = Sheets(1).Range("A100").End(xlUp).Row
MaxrowC = Sheets(1).Range("C100").End(xlUp).Row

For RowC = 1 To MaxrowC
    MyStr = Right(Sheets(1).Range("C" & RowC), 26)
    
    For RowA = 1 To MaxrowA
        TempStr = Sheets(1).Range("A" & RowA)
        
'使用LIKE方法,配合通配符来完成匹配
        If TempStr Like "*" & MyStr Then
            Sheets(1).Range("D" & RowC) = TempStr
            Exit For
        End If
    Next RowA

Next RowC

MsgBox "Complete"
End Sub

根据以往我们所学的知识点,不难写出上面的代码。

但如果我们A列,C列的数据特别多,那么我们的代码的执行效率会非常非常的慢,今天的重点来了,用Find方法来进行查找。

思路上差不多,只需要把遍历换成Find方法。

【代码】

Sub test1218_2()
Dim MyStr As String
Dim TempStr As String
Dim RowC As Integer
Dim MaxrowC As Integer
Dim Myrow As Integer

RowC = 1
MaxrowC = Sheets(1).Range("C100").End(xlUp).Row

For RowC = 1 To MaxrowC
    MyStr = Right(Sheets(1).Range("C" & RowC), 26)
    
    Sheets(1).Columns("A").Select

    '用Find方法获取相同内容的行数

    Myrow = Selection.Find(what:=MyStr).Row
   
    Sheets(1).Range("D" & RowC) = Sheets(1).Range("A" & Myrow)
        
Next RowC

MsgBox "Complete"
End Sub

【问答】

Kevin

短信/彩信
昨天21 :11

Find的方法和作用是什么?

今天15 :23

在区域中查找特定信息。

必选参数有什么?

今天15 :40

What,要搜索的数据。 可为字符串或任意 Microsoft Excel 数据类型。




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
EXCEL中的VBA做九九乘法表
vba 检查一个文件夹中的文件在另一个文件夹中是否存在(不含扩展名)
【VBA实例】九九乘法口诀
EXCEL:一个工作薄中多个工作表合并代码
常用VBA代码
输入时逐步提示信息
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服