今天把学习的源文件共享了出来,供大家学习使用
上次想到要学习这个
结合网友也提出意见,做一个,如果有用,请下载或复制代码使用
【问题】我们在工作中有时要在某个文件(工作簿)中查找一些数据,提取出来。常用的方法是打开文件,来查找,再复制保存起来。如果数据少还是手工可以的,如果数据多了可能就。。。。
所以才有这个想法。想要做好了以后同样的工作就方便了
【想法】
在一个程序主控文件中
主控文件设定如图
数据源文件有两个工作表
查找到"郭靖"的数据保存到目标文件的【射雕英雄传】工作表
查找到"杨过"的数据保存到目标文件的【第一个】工作表
【代码】
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
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有