我有过去5年每天的销售数据文件(数百本工作簿)。
每个工作簿都有很多工作表,我希望只从每个文件中的摘要表中获取信息。
每个文件都有一个摘要页面标题为"摘要详细"有: 单元格E12,E13,E14和E15中的4个数据。
我想获取此信息并将其转换为新文件中的行。 我还希望它将工作簿的名称复制到A列并将数据放在它旁边(B-E列)。
然后我想从这些工作簿中的另一个工作表中获取另外两个数据,并将它们放在上面4(F,G)右侧的列中。
其他工作表名为" Daily Detailed"。由于销售记录每天都在变化,因此每个文件的总行数不同。但是这两个相关的行标有" Total Pipes"和"总阀门" (在B列中),数据位于两列的J列中。
我按年将文件整理到文件夹中,因此" 2014"。是否可以运行宏来打开文件夹中的文件而无需手动打开每个文件?
有关如何构建宏以从每个工作簿中获取此数据的任何想法? 谢谢!
答案 0 :(得分:0)
搜索此网站的最低限度将为您提供类似的内容。查看excel-vba文档内容(这是一个非常有用的资源)>>
Sub Theloopofloops()
Dim wbk As Workbook
Dim Filename As String
Dim path As String
Dim rCell As Range
Dim rRng As Range
Dim wsO As Worksheet
Dim StartTime As Double
Dim SecondsElapsed As Double
Dim sheet As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
StartTime = Timer
path = "pathtofile(s)" & "\"
Filename = Dir(path & "*.xl??")
Set wsO = ThisWorkbook.Sheets("Sheet1")
Do While Len(Filename) > 0
DoEvents
Set wbk = Workbooks.Open(path & Filename, True, True)
For Each sheet In ActiveWorkbook.Worksheets
Set rRng = sheet.Range("b1:b308")
For Each rCell In rRng.Cells
If rCell <> "" And rCell.Value <> 0 Then
'code to do stuff
'avoid stuff like .copy/.paste
'using stuff like "sheet.range.value = sheet.range.value instead
End If
Next rCell
Next
wbk.Close False
Filename = Dir
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
SecondsElapsed = Round(Timer - StartTime, 2)
MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation
End Sub
此网站上提问的部分要求是至少尝试过自己。看到这个代码在本网站的许多地方已经很容易获得,我认为只是在提供帮助是没有害处的。)
此外,您还需要调整此代码以满足您的需求。不过我为你做了繁重的工作。