Excel VBA 用于创建数据透视表的参考源数据 Table

Excel VBA Reference SourceData for Creating Pivot Table

我需要帮助!

为了将 table 转换为列表,我使用了以下 VBA 公式。它是使用记录宏和数据透视表向导(不是最优雅的解决方案)创建的,但它有效。

ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
    Array("PasteSheet!R1C1:R300C200"), Version:=xlPivotTableVersion14). _
    CreatePivotTable TableDestination:="", TableName:="PivotTable3", _
    DefaultVersion:=xlPivotTableVersion14
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("PivotTable3").DataPivotField.PivotItems( _
    "Count of Value").Position = 1
ActiveSheet.PivotTables("PivotTable3").PivotFields("Row").Orientation = _
    xlHidden
ActiveSheet.PivotTables("PivotTable3").PivotFields("Column").Orientation = _
    xlHidden
Range("A4").Select
Selection.ShowDetail = True

我的问题是我希望能够将 SourceData 设置为引用存储的变量,因为每次宏 运行 时源数据范围都会改变,但我无法让它工作并且到处搜索都没有结果。我最好的尝试是尝试以下方法。

Dim newRange As Variant

Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select

Set newRange = Selection

ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= _
    newRange, Version:=xlPivotTableVersion14). _
    CreatePivotTable TableDestination:="", TableName:="PivotTable3", _
    DefaultVersion:=xlPivotTableVersion14
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("PivotTable3").DataPivotField.PivotItems( _
    "Count of Value").Position = 1
ActiveSheet.PivotTables("PivotTable3").PivotFields("Row").Orientation = _
    xlHidden
ActiveSheet.PivotTables("PivotTable3").PivotFields("Column").Orientation = _
    xlHidden
Range("A4").Select
Selection.ShowDetail = True

不胜感激!

您需要以不同方式引用源数组。我确信有比我下面的示例更好的方法,但这确实有效

Dim newRange As Range

Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select

newRange = Selection
ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:= Array("R" & newRange.Row & "C" & newRange.Column & ":R" & newRange.Row + newRange.Rows.Count - 1 & "C" & newRange.Column + newRange.Columns.Count - 1), Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="", TableName:="PivotTable3", DefaultVersion:=xlPivotTableVersion14
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("PivotTable3").DataPivotField.PivotItems("Count of Value").Position = 1
ActiveSheet.PivotTables("PivotTable3").PivotFields("Row").Orientation = xlHidden
ActiveSheet.PivotTables("PivotTable3").PivotFields("Column").Orientation = xlHidden
Range("A4").Select
Selection.ShowDetail = True

我在寻找类似问题的解决方案时偶然发现了这个 post 无论如何。回答这个老post。我可能会帮助别人。

SourceData 可以通过两种方式寻址。 witchild 使用的那个:

"nameofyourworksheet!R1C1:R" & Nbroftherowsofthesourcedataorarray & "C17", Version:=xlPivotTableVersion15).CreatePivotTable _'

或者,第二种方式:

ActiveWorkbook.Worksheets("nameofyourworksheet").Range("A1:Q" & Nbroftherowsofthesourcedataorarray).Address(, , xlR1C1, True), Version:=xlPivotTableVersion15).CreatePivotTable _

代码行:.Address(, , xlR1C1, True) 表示范围将转换为格式 "R..C.." 以使其工作。我没试过,但我相信论坛 :p

希望我能够帮助人们寻找解决此问题的方法