Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >yhd-VBA从一个工作簿的某工作表中查找符合条件的数据插入到另一个工作簿的某工作表中

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

作者头像
哆哆Excel
发布于 2022-10-31 07:40:19
发布于 2022-10-31 07:40:19
5.8K00
代码可运行
举报
文章被收录于专栏:哆哆Excel哆哆Excel
运行总次数:0
代码可运行

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

上次想到要学习这个

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

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

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

【想法】

在一个程序主控文件中

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

主控文件设定如图

数据源文件有两个工作表

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

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

【代码】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ExcelVBA从工作簿中查询多个姓名并复制出整行数据
工作中用的代码 Sub ExcelVBA从工作簿中查询多个姓名并复制出整行数据() Dim outFile As String, inFile As String Dim outWb As Workbook, mysht As Worksheet, tempsht As Worksheet, t_arr(1 To 30) Dim SearchRange As Range Dim LastRow As Integer, arr, FindStr As String, i
哆哆Excel
2022/10/31
1.7K0
ExcelVBA筛选法按分类条件拆分一个工作表为多个工作簿
对上次的文章进行优化 ==========代码如下===== Sub 筛选拆分() Dim d As Object, sht As Worksheet, arr, brr, r, kr, i&, j&, k&, x& Dim Rng As Range, Rg As Range, tRow&, tCol& Dim wb As Object, mysht As Worksheet Set d = CreateObject("scripting.dictionary") 'se
哆哆Excel
2022/10/31
3.7K1
Excel应用实践10:合并多个工作簿中的数据
我有超过50个具有相同格式的Excel文件,它们的列标题相同,并且都放置在同一文件夹,有什么快速的方法将它们合并到一个单独的Excel文件的一个工作表中?
fanjy
2019/07/19
2.4K0
几个有用的Excel VBA脚本
最近有个朋友要处理很多的Excel数据,但是手工处理又太慢,让我帮忙处理。通过搜索和自己的编写,帮他写了几个脚本,大大提高了工作效率。其实Excel中的脚本(宏)的功能非常方便,只要熟悉了Excel的对象,做一些常见的处理,还是非常容易的。
大江小浪
2018/07/25
1.5K0
文件夹中多工作薄指定工作表中提取指定字符的数据
【问题描述】一个文件夹中有4年的公司的销售情况的Excel文件,一个月一个文件,每个文件中有一个工作表”销售情况”,请你在“销售情况”的工作表中,复制出”小龙女”的销售金额,并汇总到一个工作表,计算出“小龙女”这四年来的销售总额
哆哆Excel
2022/10/25
1K0
文件夹中多工作薄指定工作表中提取指定字符的数据
Excel-VBA超级VLOOKUP查询引用输入工具
1.多条件设定(因为姓名时有重名,身份证时有大小写,有时姓名与身份证对不上,所以最好的方法是:姓名+身份证)
哆哆Excel
2022/10/31
1.2K0
matinal:Excel用VBA代码一键合并汇总多个工作簿
有时候,你需要将几十个工作簿中的内容,快速汇总至合并至一个工作簿,如果手动一个复制粘贴,那心里有苦说不出。。。
matinal
2023/11/21
1.1K1
matinal:Excel用VBA代码一键合并汇总多个工作簿
VBA用字典批量查找社保数据
【问题】我们知道社保导出的数据是很多合并的单元格,如果要查找一个数据都要找很久,如果数量多了更多费时,基于以上问题,特用VBA设计一个批量查找的程序。
哆哆Excel
2022/10/25
7300
VBA用字典批量查找社保数据
合并多个工作簿
很多时候,我们都有将多个工作簿合并成一个工作簿的需求。当然,根据需求的不同,合并工作簿的代码会有差异。在完美Excel中给出过多个合并工作簿的示例,有兴趣的朋友可以查阅历史文章。
fanjy
2024/02/21
2570
合并多个工作簿
ExcelVBA拆分之一簿一表_to_一簿多表使用演示
哆哆Excel
2023/09/09
2730
ExcelVBA拆分之一簿一表_to_一簿多表
哆哆Excel
2023/09/09
2590
ExcelVBA拆分之一簿一表_to_一簿多表
VBA汇总一个文件多工作表到一个表
VBA汇总一个文件多工作表到一个表 . 今天在工作中,同事传来一个excel文件中有很多个工作表,要我汇总,每个表的标题是一样的,虽然一个一个复制、粘贴是可以做到的,但时间很长,所以把以前学习一个代码,拿来用一下,代码找了很久才找到,想想还是把他放在这里好一点,以后查找方便 . 把多个工作表的内容汇总到一个“汇总”表中 Sub sheets_to_one() Dim mysht As Worksheet, rng As Range, sht As Worksheet Dim
哆哆Excel
2022/10/31
5750
ExcelVBA汇总-多簿一表_to_一簿一表
哆哆Excel
2023/09/09
3060
ExcelVBA汇总-多簿一表_to_一簿一表
Excel应用实践14:合并多个工作簿中的数据—示例3
要合并工作簿的情形有许多种,但最终的目的只有一条,将繁锁的手工操作自动化,让程序快速帮助我们完成这些重复的工作。
fanjy
2019/07/19
1.7K0
VBA字典(详解,示例)「建议收藏」
如果对上面水果种类进行计数:countifs,只需要将分类汇总的值改为数值1即可,每出现一次‘+1’
全栈程序员站长
2022/07/22
6.4K1
VBA字典(详解,示例)「建议收藏」
Excel学习----一键创建相应“惟一性”的文件,再筛选数据并写入相应的文件中
领导是要求是:有这样的一个表格,请按“模板”文件,建立面试级别的几个文件,并筛选出相应的内容填写到各工作簿中,
哆哆Excel
2022/10/25
8760
Excel学习----一键创建相应“惟一性”的文件,再筛选数据并写入相应的文件中
ExcelVBA请按班别拆分为工作簿(筛选复制法)
请按班别拆分为工作簿 Sub 筛选拆分() Dim d As Object, sht As Worksheet, arr,brr, r, kr, i&, j&, k&, x& Dim Rng As Range, Rg As Range, tRow&,tCol&, aCol&, pd&, Cll As Range Dim wb As Object, mysht As Worksheet Set d =CreateObject("scripting.dictionary") '
哆哆Excel
2022/10/31
4630
常用功能加载宏——多个工作簿合并到一个工作簿
对于做管理工作的,收集表格这种工作应该会经常有,设计一个表格模板,发给各个有关单位去填写,收集起来后再合并到一起。
xyj
2020/07/28
1.9K0
常用功能加载宏——多个工作簿合并到一个工作簿
Excel应用实践19:根据工作表某列中的值从另一工作簿中获取数据
在下图1所示的工作簿Data.xlsx的工作表Sheet1中,存放着待使用的数据。
fanjy
2019/08/27
19.8K0
Excel应用实践19:根据工作表某列中的值从另一工作簿中获取数据
VBA: 将多个工作簿的第一张工作表合并到一个工作簿中
文章背景: 在工作中,有时需要将多个工作簿进行合并,比如将多份原始数据附在报告之后。一般的操作方法是打开两个工作簿(目标工作簿和待转移的工作簿),然后选中需要移动的工作表,右键单击以后选择“移动或复制”。接下来在新的对话框里面进行设置。
Exploring
2022/09/20
6.4K0
VBA:  将多个工作簿的第一张工作表合并到一个工作簿中
推荐阅读
相关推荐
ExcelVBA从工作簿中查询多个姓名并复制出整行数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验