我需要帮助!
为了将表格转换为列表,我使用以下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设置为引用存储的变量,因为每次运行宏时源数据范围都会发生变化,但是我无法使其工作并在每个地方使用Google搜索结果。我最好的镜头是尝试以下。
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
非常感谢帮助!
答案 0 :(得分:0)
您需要以不同方式引用源数组。我确信有比下面的例子更好的方法,但这确实有效
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
答案 1 :(得分:0)
我在寻找类似问题的解决方案时偶然发现了这篇文章 无论如何。回答这个旧帖子。我可能会帮助别人。
可以通过两种方式寻址SourceData。要么是witchild使用的那个:
$ gcc hello.cpp
/tmp/cc9uZOKP.o: In function `main':
hello.cpp:(.text+0xe): undefined reference to `std::cout'
hello.cpp:(.text+0x13): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
hello.cpp:(.text+0x20): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
/tmp/cc9uZOKP.o: In function `__static_initialization_and_destruction_0(int, int)':
hello.cpp:(.text+0x50): undefined reference to `std::ios_base::Init::Init()'
hello.cpp:(.text+0x65): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status
或者,第二种方式:
"nameofyourworksheet!R1C1:R" & Nbroftherowsofthesourcedataorarray & "C17", Version:=xlPivotTableVersion15).CreatePivotTable _'
代码行:.Address(,,xlR1C1,True)表示该范围将转换为格式“ R..C ..”以使其起作用。我没有尝试过,但是我相信论坛:p
希望我能够帮助人们寻找该问题的解决方案