【发布时间】:2018-05-03 01:20:41
【问题描述】:
我有一个带有 S5 工作表的(过滤)工作簿。我有 56 个带有 S1 表的 excel 文件,每个文件夹中有 300 到 40 万条记录。如果过滤工作簿的 S5 表的 C 列与文件夹中 excel 文件列表(全部)的 AG 列匹配,我想从多个文件中复制匹配数据和 S5 的列数据 A(过滤条件文件“)在新摘要表的同一行。我从朋友那里得到的以下宏在一定程度上有效。我必须像文件 1、2、3 ... 56 一样运行它 56 次。但它需要一个多小时并跳过记录。有没有更好的方法可用?非常感谢您的帮助。
Sub FilterData ()
Set kFS = CreateObject("Scripting.FileSystemObject")
Set kF = kFS.GetFile("C:\Users\Tech\Desktop\TEST\SrcFile.xlsx")
Dim mainWB As Workbook
Set mainWB = Workbooks.Open("C:\Users\tech\Desktop\TEST\SrcFile.xlsx")
mainWB.Sheets("S5").Select
Dim newLastRow As Long
'File1
Set desFS = CreateObject("Scripting.FileSystemObject")
Set desF = kFS.GetFile("C:\Users\tech\Desktop\TEST\Report\File1.xlsx")
Dim desWB As Workbook
Set desWB = Workbooks.Open("C:\Users\tech\Desktop\TEST\Report\File1.xlsx")
desWB.Sheets("S1").Select
Dim rng1 As Range, rng2 As Range, rngName As Range, rngName1 As Range, i As Integer, j As Integer
For i = 1 To mainWB.Sheets("S5").Range("A" & Rows.Count).End(xlUp).Row
Set rng1 = mainWB.Sheets("S5").Range("C" & i)
Set rngName1 = mainWB.Sheets("S5").Range("A" & i)
For j = 1 To desWB.Sheets("S1").Range("A" & Rows.Count).End(xlUp).Row
Set rng2 = desWB.Sheets("S1").Range("AG" & j)
Set rngName = desWB.Sheets("S1").Rows(j)
If rng1.Value = rng2.Value Then
rngName.Copy Destination:=mainWB.Sheets("New").Range("A" & i)
rngName1.Copy Destination:=mainWB.Sheets("New").Range("AH" & i)
End If
Set rng2 = Nothing
Next j
Set rng1 = Nothing
Next i
desWB.Close
newLastRow = mainWB.Sheets("New").Range("A" & Rows.Count).End(xlUp).Row
End Sub
【问题讨论】:
-
“有更好的方法吗?” 是的,使用特定的数据库工具。可能是 Access 或其他(只需 google 即可)