【问题标题】:Fetching Data from PivotTable into Array in VBA (Excel)将数据从数据透视表提取到 VBA 中的数组(Excel)
【发布时间】:2019-10-13 22:46:12
【问题描述】:

我正在尝试从数据透视表中获取数据,在 VBA 的数组中使用它,然后打印它。我是 VBA 的新手,我看过一些教程,但我实际上无法理解。

我尝试使用“DataBodyRange”引用我的列范围,但我总是遇到不同的错误。 “Sheet4”是我的“PivotTable1”所在的工作表。我需要列中的所有数据。

Public Sub ReadToArray()
    'Range
    Dim rg As Range
    Set rg = Worksheets("Sheet4").pt("PivotTable1").DataBodyRange

    'Dynamic Array
     Dim Done As Variant
     Done = rg.Value

    'Array Values
     Debug.Print "i", "Value"
     Dim i As Long
     For i = LBound(Done) To UBound(Done)
         Debug.Print i, Done(i)
     Next i
 End Sub

最终结果是我想打印出整列的值,然后再使用它们。

【问题讨论】:

    标签: excel vba pivot-table excel-2007


    【解决方案1】:

    所以我可以看到导致这种情况的一些问题。首先,要在工作表中引用数据透视表,您需要 .pivottables() 而不是 .pt()

    接下来,将数组设置为具有像这样的范围内的值将为您提供一个二维数组,因此您需要在二维中循环遍历它以获取所有值。我使用第二个迭代器 j 添加了一个嵌套循环:

    Public Sub ReadToArray()
    
         Dim pt As PivotTable
         Dim rg As Range
         Set pt = Worksheets("Sheet4").PivotTables("PivotTable1")
    
         Set rg = pt.DataBodyRange
    
         Dim Done As Variant
    
         Done = rg.Value
    
         Debug.Print "i", "Value"
         Dim i As Long, j As Long
    
         For i = LBound(Done, 1) To UBound(Done, 1)
            For j = LBound(Done, 2) To UBound(Done, 2)
                Debug.Print i & ", " & j & ", " & Done(i, j)
            Next j
         Next i
    
     End Sub
    

    【讨论】:

    • 感谢您的帮助,它有效!你知道我怎样才能让 Done(i, j) 的值只显示一次而不是两次吗?我的意思是当我将 'Debug.Print i &' 、 " & j & "、 " & Done(i, j)" 'to Debug.Print Done(i, j)' 时,这些值会重复。
    • 它们是否以不同的 j 值显示?这可能是因为您在数据透视表中打开了一些小计或总计。
    猜你喜欢
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多