我是 excel VBA 的新手,有一个关于从多个 excel 工作簿中获取数据到 noew 工作簿的问题。
我在这里解释一下:
1. 在一个主文件夹("C:\desktop\Main\"
)中,有多个子文件夹(这里以folder A1
和folder A2
为例)。"C:\desktop\Main\A1\"
&"C:\desktop\Main\A2\"
在每个子文件夹中,都有多个excel。
例如: In folder A1
,有 2 个文件夹 ( A1-2015.xlsx
and A1-2016.xlsx
)"C:\desktop\Main\A1\A1-2015.xlsx"
和"C:\desktop\Main\A1\A1-2016.xlsx"
In folder A2
,有 3 个文件夹 ( A2-2015.xlsx
,A2-2016.xlsx
和A2-2017.xlsx
)
我想将这些 excel 中的单元格放入新的 excel 工作簿中。
2. 所以,基于对 item1 的解释。我以 A1 ( A1-2016.xlsx
) 之一和 A2 ( A2-2017.xlsx
) excel 之一为例。
A1 看起来像上图。
A2 在固定单元格中包含相同的模板,其中包含不同的数字/字符。
3.我想这样获取它们:
所有的excel都有固定的模板,就像上面的例子一样。
如果我有多个包含多个 excel 的文件夹,我该怎么办?谢谢你。
这取决于您是否知道主文件夹下有多少级子文件夹。如果这是可预测的,例如,您知道只有以下两个级别(Main>A1),那么它非常简单。您想使用文件系统对象(需要您从工具>引用菜单添加对 Microsoft Scripting Runtime 的引用)。
添加后,请使用以下代码为您完成工作(您可能需要稍微调整它,因为我主要是猜测您希望将哪些信息从文件合并到主文件中):
Sub Merge_Files()
Dim FSO As New FileSystemObject
Dim Main_Fold As Folder, Sub_1 As Folder
Dim Fil As File
Dim Main_WB As Workbook, New_WB As Workbook
Dim X As Integer, Y As Integer
Set Main_WB = ActiveWorkbook
Set Main_Fold = FSO.GetFolder("C:\Desktop\Main\") 'Replace this with a reference to your actual main folder.
For Each Sub_1 In Main_Fold.subFolders
For Each Fil In Sub_1.Files
Set New_WB = Workbooks.Open(Fil.Path)
For X = 2 To 1000
If Main_WB.Sheets(1).Range("A" & X).Value = "" Then
Main_WB.Sheets(1).Range("A" & X).Value = New_WB.Sheets(1).Range("C2").Value
Exit For
End If
If Main_WB.Sheets(1).Range("A" & X).Value = New_WB.Sheets(1).Range("C2").Value Then Exit For
Next X
For Y = 2 To 5
Main_WB.Sheets(1).Cells(X, Y) = New_WB.Sheets(1).Range("C" & (Y + 1)).Value
Next Y
For Y = 4 To 9
If Y = 6 Then Y = 7
If Y < 6 Then
Main_WB.Sheets(1).Cells(X, Y + 2) = New_WB.Sheets(1).Cells(9, Y)
Else
Main_WB.Sheets(1).Cells(X, Y + 1) = New_WB.Sheets(1).Cells(9, Y)
End If
Next Y
Main_WB.Sheets(1).Range("K" & X).Value = New_WB.Sheets(1).Range("K21").Value
New_WB.Close SaveChanges:=False
Next Fil
Next Sub_1
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句