代码原理 :
双击数据透视表“数据区域”中的任意一个单元格,比如B4单元格,Excel会自动生成一个新的工作表,该工作表中的数据就是形成你所点击的单元格中数据的所有原始数据记录!
—————————-Templete—————————–
Sub 宏1()
Dim pivotSht As Worksheet
Set pivotSht = Sheets.Add
strDataAddr = “Sheet1!” &Worksheets(“Sheet1”).UsedRange.Address
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase,SourceData:= _ strDataAddr,Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:=pivotSht.Name & “!R3C1”,TableName:=”数据透视表1”,DefaultVersion:= _ xlPivotTableVersion14
pivotSht.Cells(3, 1).Select
With pivotSht.PivotTables(“数据透视表1”).PivotFields(“地区”)
.Orientation = xlRowField
.Position = 1
End With
pivotSht.PivotTables(“数据透视表1”).AddDataField ActiveSheet.PivotTables(“数据透视表1” _ ).PivotFields(“库存数量”), “求和项:库存数量”, xlSum
Dim myCell As Range
Set myCell = pivotSht.Range(“B4”)
Do Until myCell.Value = “”
myCell.ShowDetail= True
ActiveSheet.Name= myCell.Offset(0, -1).Value
Set myCell = myCell.Offset(1, 0)
Loop
MsgBox”搞定!”
End Sub
—————————-Failure Version———————-
Sub 工作表拆分()
‘定义pivotSht为工作表
Dim pivotSht As Worksheet
‘将新增加的工作表赋值给pivotSht
Set pivotSht = Sheets.Add
‘代表数据透视表的原始数据范围,此处的Sheet1需根据存放数据源的实际工作表名称替换
strDataAddr = “Sheet1!” &Worksheets(“Sheet1”).UsedRange.Address
‘ ActiveWorkbook.PivotCaches.Create得到的是一个PivotCaches实例,后面加.CreatePivotTable是表示用这块缓存数据来建立数据透视表。 .CreatePivotTable后面跟的是创建数据透视表所需的参数:
TableDestination:=后跟生成的数据透视表的位置,假如我们要在”新增加的工作表”worksheet的A3单元格为左上角生成数据透视表,那么这个位置就可以写”新增加的工作表!R3C1”。此处的新增加的工作表赋值给pivotSht
TableName:=后跟创建数据透视表的名称,这个很重要,如果要用宏创建多个数据表的时候,要注意这里很可能后面跟的是一个变量。Excel在创建数据透视表的时候,会检查此Workbook内所包含的所有数据表的名称,是否有重复名称,如果有重复名称的情况(即当前创建的数据透视表与其他表重名),则会报错。
DefaultVersion:=后跟数据透视表的版本号,必须与之前创建缓存时版本号相同
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase,SourceData:= _ strDataAddr,Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:=pivotSht.Name & “!R3C1”,TableName:=”数据透视表1”,DefaultVersion:= _ xlPivotTableVersion14
’对“小区名称”这一列数据进行透视操作
pivotSht.Cells(3, 1).Select
With pivotSht.PivotTables(“数据透视表1”).PivotFields(“小区名称”)
.Orientation = xlRowField
.Position = 1
End With
‘以下是对生成的数据透视表进行操作:
pivotSht.PivotTables(“数据透视表1”).AddDataField ActiveSheet.PivotTables(“数据透视表1” ).PivotFields(“小区名称”), “计数项:小区名称”, xlCount
‘数据区从B4单元格开始,我们只要从B4单元格开始,对下面的每一个单元格调用ShowDetail方法即可,直到遇到空白单元格为止。根据这个思路,这部分代码修改如下。在这段VBA代码中,首先定义了一个Range类型的Excel对象变量myCell,用来代表当前正在处理的单元格。当该单元格对象执行ShowDetail方法(生成对应的工作表)完毕后,接着执行代码Set myCell =myCell.Offset(1, 0)时,myCell就会引用当前单元格下面一个单元格,由于该行代码在“Do…Loop”循环体内,循环进行相同的处理,直至myCell.Value= “”。
这里面还有一句VBA代码ActiveSheet.Name = myCell.Offset(0,-1).Value,它的作用是,给新拆分出来的工作表取一个有意义的名字,该名字就是myCell.ShowDetail方法所涉及的单元格左边的单元格中的内容(myCell.Offset(0, -1).Value)
Dim myCell As Range
Set myCell = pivotSht.Range(“B4”)
Do Until myCell.Value = “”
myCell.ShowDetail= True
ActiveSheet.Name= myCell.Offset(0, -1).Value
Set myCell = myCell.Offset(1, 0)
Loop
MsgBox”搞定!”
End Sub