VBA通过关键字查找工作簿、工作表的行

这篇博客介绍了两种使用VBA宏在Excel中通过关键字查找并汇总工作表行的方法。方法一是遍历工作簿中的每个工作表,查找包含特定关键字的行,然后将这些行的数据复制到汇总工作表中。方法二则扩展到跨工作簿查找,同时处理包含和不包含特定关键字的行。这些宏实现了部分匹配查找,适用于大量数据的快速筛选和整理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、通过关键字查找工作表的行方法1:

Option Explicit
Option Compare Text

Sub 关键字查找工作表行()
    'vba关于查找方法(Find方法)的应用(一)
    Dim findValue As Range
   
    Dim eachSheet As Worksheet
    Dim inpu As String
    Dim a, b
    b = 0
    MsgBox "全称为关键字查找工作表的行,如查找关键字:合计、汇总、总计……。查找同一个工作簿中的工作表。汇总到工作表《汇总各表行》,保留数值、格式,不保留公式。"
    inpu = Application.InputBox("请输入需要查找的关键字(如合计、汇总等),是按照部分匹配查找,输入字符串必须准确,否则查找结果太多容易导致死锁:", Type:=2)
    
    
    Dim sht As Worksheet '定义对象变量sht,用于表示工作表
    On Error Resume Next '容错语句
    Set sht = Sheets("汇总各表行") '将“成绩统计表”赋值给对象变量sht
    If Err <> 0 Then '如果表格不存在,上面的赋值操作会出错,Err<>0表示有错误
        Sheets.Add(, Sheets(Sheets.Count)).Name = "汇总各表行" '新建在最后面
    Else
        Debug.Print "该表已经存在" '如果没出错,说明表格存在,给出提示
    End If

    
    
    For Each eachSheet In Worksheets
        If Not eachSheet.Name = "汇总各表行" Then
            Set findValue = eachSheet.UsedRange.Find(what:=inpu)
            '查找内容为“黄”字,如果加上参数lookat:=xlWhole,就是完全匹配,单元格只有一个“黄”字才算找到,这里演示的是不指定,默认就是单元格内容“包含”这个字就可以了,注意的事,如果手动在查找替换窗口里把“单元格匹配”勾打上的话,这里不进行设置会直接按手动在“查找替换”窗口中设置的值进行查找。找到就把当前位置绝对位置赋值给变量,如果要取找到的单元格的值后面加.value,这样可以获取到所有包含指定字符的所有单元格内容。
            Debug.Print eachSheet.Name
            If Not findValue Is Nothing Then
                'is nothing 就是没事情发生,没有找到, 前面加一个not,那意思就相反了,就是找到有,也可以前面不加not,只需要把下面ELSE前后位置调一下就可以了。
                'MsgBox "第一个数据数据在单元格:" & findValue.Address '以上一次查找到的位置往下查找
                b = b + 1 '设置一个计数变量,统计一共找到多少个符合条件的
                a = findValue.Address '把第一个找到的地址赋值给变量a,以此对比是否已经全部查找完毕。
                eachSheet.Range(Cells(findValue.Row, 1), Cells(findValue.Row, 10)).Copy
                Worksheets("汇总各表行").Cells(b + 1, 2).PasteSpecial Paste:=xlPasteFormats
                Worksheets("汇总各表行").Cells(b + 1, 2).PasteSpecial Paste:=xlPasteValues
                
                Worksheets("汇总各表行").Cells(b + 1, 1).Value = eachSheet.Name
                 Do
                    '开始循环查找,一般使用Do循环命令会在前面设置一个循环条件或在后面设置一个终止条件,我这里前后都没有设置,而是在中间对条件进行判断,当查找结束就使用exit do命令退出do循环
                    'after前面要有findvalue,否则报错,do loop要在else之前
                    Set findValue = eachSheet.UsedRange.FindNext(After:=findValue)
                    '使用findnext继续往下查找,After参数是指定从哪个单元格的下一个开始查找,其中“:=”后面的findvalue是上一次查找到的位置对象变量,意思就是从这一个单元格的下一个单元格
                    If findValue.Address = a Then '如果当前的位置和最开始找到的位置一样,则
                        Set findValue = Rows.FindPrevious(After:=findValue) '以上一次查找到的位置继续往上查找,注意这个是往上查找,因为当前位置已经是最开始第一次找到的位置,往上找一次就是最后一个找到的位置。
                      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值