共有366个表格文件,每个文件有9405行,10列,每一行包含一个地区的地点,温度等信息,但是366个表格是代表366天,是每一天9405个不同地点的变化,现在将这366表格变为9405个表格,这9405个表格中是那366个表格中名字相同所在行的整行数据,这366个表格在一个文件夹下,用VBA的方式实现上述想法,写出代码
时间: 2024-03-17 16:45:55 浏览: 103
以下是VBA代码实现将366个表格变为9405个表格,每个表格包含某个地点的365天温度信息的整行数据:
```
Sub MergeData()
Dim FilePath As String
Dim FileName As String
Dim SheetName As String
Dim DestFileName As String
Dim DestSheetName As String
Dim LastRow As Long
Dim DestLastRow As Long
Dim i As Integer
Dim j As Integer
'设置源文件夹路径和目标文件夹路径
FilePath = "C:\SourceFolder\"
DestFilePath = "C:\DestFolder\"
'循环遍历源文件夹下的所有文件
FileName = Dir(FilePath)
Do While FileName <> ""
'打开源文件
Workbooks.Open (FilePath & FileName)
'获取源文件名和表格名
SheetName = ActiveWorkbook.Sheets(1).Name
'循环遍历源表格中的所有行
For i = 1 To 9405
'获取当前行的地点名称
PlaceName = ActiveWorkbook.Sheets(1).Cells(i, 1).Value
'在目标文件中查找该地点名称对应的表格
DestFileName = DestFilePath & PlaceName & ".xlsx"
If Dir(DestFileName) = "" Then
'如果目标文件不存在,则新建该文件,并在第一行写入表头
Workbooks.Add
ActiveSheet.Name = SheetName
ActiveWorkbook.SaveAs DestFileName
ActiveWorkbook.Close
Workbooks.Open (DestFileName)
DestLastRow = 1
For j = 1 To 10
ActiveWorkbook.Sheets(1).Cells(DestLastRow, j).Value = ActiveWorkbook.Sheets(1).Cells(1, j).Value
Next j
Else
'如果目标文件已存在,则打开该文件,并在最后一行写入当前行的数据
Workbooks.Open (DestFileName)
DestLastRow = ActiveWorkbook.Sheets(1).UsedRange.Rows.Count + 1
End If
'将当前行的数据写入目标文件中对应的表格中
For j = 1 To 10
ActiveWorkbook.Sheets(1).Cells(DestLastRow, j).Value = ActiveWorkbook.Sheets(1).Cells(i, j).Value
Next j
ActiveWorkbook.Save
ActiveWorkbook.Close
Next i
'关闭源文件
Workbooks(FileName).Close
'获取下一个文件名
FileName = Dir
Loop
End Sub
```
以上代码将会遍历指定的源文件夹下的所有文件,对于每个文件,将会循环遍历其中的所有行,将每行数据写入对应的目标文件中的表格中。如果目标文件不存在,将会新建该文件,并在第一行写入表头;如果目标文件已存在,则会在最后一行写入当前行的数据。在目标文件中,每个表格对应某个地点的365天温度信息的整行数据。在代码中,我假设源文件夹路径为"C:\SourceFolder\",目标文件夹路径为"C:\DestFolder\",每个源文件中的表格名和第一个单元格中的地点名称相同。因此,在目标文件中,每个表格的名称为对应地点名称,例如,如果某个地点名称为"New York",则对应的表格名为"New York.xlsx"。请根据实际情况修改代码中的文件夹路径和文件名等参数。
阅读全文