【问题标题】:Grand total pivot table range reference for excel VBAexcel VBA的总计数据透视表范围参考
【发布时间】:2019-04-17 08:27:02
【问题描述】:

我想简单地获取数据透视表总计的值。但是,我需要它比网上找到的解决方案更具动态性。

我在网上看到的一个简单解决方案是获取在总计列范围内找到的最后一个单元格。在这种情况下,结果类似于下面提到的代码。

Dim grandTotal As Range
grandTotal = Range("E65536").End(xlUp)
MsgBox grandTotal.Value

但是,如果我在数据透视表下方的同一列中填写了一些数据,这将失败。有没有办法精确引用总价值?也许就像引用两个总计列和行的数据范围,并在两者之间找到一个相交以使单元格以黄色突出显示?

编辑:

如何获取两个不同数据值列的总计

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    好吧,因为它将是数据透视表中最右下角的单元格:

    Set pt = Activesheet.PivotTables(1)
    grandTotal = pt.DataBodyRange.Cells(pt.DataBodyRange.Cells.Count).Value
    

    【讨论】:

    • 如果数据透视表中只有一个数据值,这将起作用。想知道如果我有两个数据值,每个数据值都有自己单独的总计列。如何分别获得两个不同的总计值?
    • 你的意思是你想得到例如东西的总和吗?如果没有,最好在您的问题中显示一个示例(编辑它)
    • 如果没有区分这些总计单元格的特定方法,我可以继续使用您的示例,并且只取数据范围中的倒数第二个单元格。
    • pt.DataBodyRange.Cells(pt.DataBodyRange.Cells.Count -1).Value 会给你这个价值:)
    【解决方案2】:

    如果您需要引用不同的行或列总计,这种方式应该很适合您。

    Sub SelectGrandTotal()
      Dim pt As PivotTable
      Dim rGrandTotal As Range
      
      Set pt = ActiveSheet.PivotTables(1)
      
      With pt
      
        'This condition checks if the GrandTotals are activated. Not really necessary in some cases.
        If .ColumnGrand And .RowGrand Then
          With .DataBodyRange
          
            'Add "- 1" after ".Count" if you want to move between different Totals.
            Set rGrandTotal = .Cells(.Rows.Count, .Columns.Count)
            rGrandTotal.Select
            'Print
            MsgBox (rGrandTotal)
    
          End With
    
        End If
    
      End With
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多