用vba对excel中多个sheet分别生成数据透视表,并放在同一个表下
时间: 2024-03-01 22:55:46 浏览: 286
可以使用以下VBA代码来对Excel中多个工作表分别生成数据透视表,并将它们放在同一个工作表下:
```
Sub CreatePivotTables()
Dim ws As Worksheet, wsMaster As Worksheet
Dim pt As PivotTable
Dim pc As PivotCache
Dim lastRow As Long, lastCol As Long
Dim pivotTopLeft As Range
'创建主工作表
Set wsMaster = ThisWorkbook.Sheets.Add
wsMaster.Name = "Master"
Set pivotTopLeft = wsMaster.Cells(1, 1)
For Each ws In ThisWorkbook.Worksheets
'跳过主工作表和空工作表
If ws.Name <> wsMaster.Name And Application.WorksheetFunction.CountA(ws.Cells) <> 0 Then
'创建数据透视表
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column
Set pc = ThisWorkbook.PivotCaches.Create(xlDatabase, ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)))
Set pt = pc.CreatePivotTable(pivotTopLeft, ws.Name & " Pivot")
'添加行字段
With pt.PivotFields("行字段1")
.Orientation = xlRowField
.Position = 1
End With
'添加列字段
With pt.PivotFields("列字段1")
.Orientation = xlColumnField
.Position = 1
End With
'添加数据字段
With pt.PivotFields("数据字段1")
.Orientation = xlDataField
.Position = 1
.Function = xlSum
.NumberFormat = "#,##0.00"
End With
'将数据透视表复制到主工作表
lastRow = wsMaster.Cells(Rows.Count, 1).End(xlUp).Row
Set pivotTopLeft = wsMaster.Cells(lastRow + 2, 1)
pt.TableRange2.Copy wsMaster.Cells(lastRow + 2, 1)
End If
Next ws
End Sub
```
在这个代码中,我们遍历了Excel文件中的每个工作表,创建了一个数据透视表,并将其放在名为“Master”的主工作表下。
需要注意的是,我们使用了一个名为“行字段1”、“列字段1”和“数据字段1”的假字段名称。在实际使用中,需要将这些名称替换为实际的字段名称。
另外,我们还使用了一个名为“pivotTopLeft”的变量,该变量指示了下一个数据透视表的左上角单元格。在每个工作表的数据透视表创建完成后,我们将其复制到主工作表,并更新“pivotTopLeft”变量以指向下一个数据透视表的位置。
最后,需要注意的是,如果每个工作表中的数据透视表列数不同,则可能需要在主工作表中手动调整列宽以适应最宽的数据透视表。
阅读全文