前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >yhd-VBA从一个工作簿的某工作表中查找符合条件的数据插入到另一个工作簿的某工作表中

yhd-VBA从一个工作簿的某工作表中查找符合条件的数据插入到另一个工作簿的某工作表中

作者头像
哆哆Excel
发布2022-10-31 15:40:19
5.3K0
发布2022-10-31 15:40:19
举报
文章被收录于专栏:哆哆Excel

今天把学习的源文件共享了出来,供大家学习使用

上次想到要学习这个

结合网友也提出意见,做一个,如果有用,请下载或复制代码使用

【问题】我们在工作中有时要在某个文件(工作簿)中查找一些数据,提取出来。常用的方法是打开文件,来查找,再复制保存起来。如果数据少还是手工可以的,如果数据多了可能就。。。。

所以才有这个想法。想要做好了以后同样的工作就方便了

【想法】

在一个程序主控文件中

  1. 设定:数据源文件(要在那里查找的工作簿)
  2. 设定:目标文件(要保存起来的那个文件)
  3. 输入你要查找的数据:如:含有:杨过,郭靖的数据。要复制整行出来

主控文件设定如图

数据源文件有两个工作表

查找到"郭靖"的数据保存到目标文件的【射雕英雄传】工作表

查找到"杨过"的数据保存到目标文件的【第一个】工作表

【代码】

代码语言:javascript
复制
Sub 从一个工作簿的某工作表中查找符合条件的数据插入到另一个工作簿的某工作表中()
    Dim outFile As String, inFile As String
    Dim outWb As Workbook, inWb As Workbook
    Dim SearchRange As Range
    Dim LastRow As Integer, arr, FindStr As String, inWbSheet As String
    With ActiveSheet
        outFile = .Range("B1").Value
        inFile = .Range("B2").Value
        LastRow = .Range("A200000").End(xlUp).Row
        If Dir(outFile, 16) = Empty Or Dir(inFile, 16) = Empty Or LastRow < 4 Then MsgBox ("初始数据不完整"): Exit Sub
        arr = .Range("A5:B" & LastRow).Value
        Debug.Print UBound(arr)
    End With
    disAppSet (False)
    t = Timer()
    FindStr = ""
    Set outWb = Workbooks.Open(outFile)
    Set inWb = Workbooks.Open(inFile)
    With outWb
        For i = 1 To UBound(arr)
            FindStr = arr(i, 1)
            With inWb
                For Each inSht In .Worksheets
                    If inSht.Name = arr(i, 2) Then
                        inShtName = arr(i, 2)
                    Else
                        inShtName = 1
                    End If
                    '==inWb=for each Sheets
                Next
            End With
            For Each Sht In .Sheets
                With Sht
                    ' 查找第一个匹配项
                    Set SearchRange = .Cells.Find(FindStr, LookIn:=xlValues)
                    ' 如果已找到匹配项
                    If Not SearchRange Is Nothing Then
                        FirstAddress = SearchRange.Address
                        RowCount = 0
                        Do
                            '找到了,要做什么========
                            OutShtName = Sht.Name
                            SearchRange.EntireRow.Copy
                            With inWb
                                With inWb.Worksheets(inShtName)
                                    .Range("A2").Insert Shift:=xlDown
                                End With
                                '==end== with inWb
                            End With
                            RowCount = RowCount + 1
                            '做什么完成=======
                            ' 查找下一个匹配项
                            Set SearchRange = .Cells.FindNext(SearchRange)
                            ' 当不再找得到匹配项时, 退出过程
                            If SearchRange Is Nothing Then
                                Exit Sub
                            End If
                            ' 在找到唯一匹配项时继续查找
                        Loop While SearchRange.Address <> FirstAddress
                    Else
                        ' 如果到了这里,则没有找到匹配的
                        MsgBox ("一个也没找到")
                    End If
                    '==end=工作表内部
                End With
                '''=end= for each sht in .Sheets
            Next
            '''==arr=行
            FindStr = ""
        Next i
        .Close False
        '===end= outWb
    End With
    Set outWb = Nothing
''    inWb.Close True
''    Set inWb = Nothing
    disAppSet (True)
    MsgBox ("完成,用时:" & Format(Timer - t, "00.00秒"))
End Sub
''''用法:disAppSet(true)开disAppSet(true)关
Sub disAppSet(flag As Boolean)
    With Application
        .ScreenUpdating = flag
        .DisplayAlerts = flag
        .AskToUpdateLinks = flag
        If flag Then
            .Calculation = xlCalculationAutomatic
        Else
            .Calculation = xlCalculationManual
        End If
    End With
End Sub

如果对你有用,可复制使用。并转发使更多的人学习到。

源文件:链接:https://share.weiyun.com/lDJvPtxZ 密码:s2n8ew

【号外】

如果你有问题要解决,可以发文件和要求来,如果我有能力帮你我会帮你的,要解决文件传到此:http://inbox.weiyun.com/VAXUBwEw

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档