如何获取数据透视表中“总计”列的范围? Excel VBA

时间:2019-04-19 03:56:19

标签: excel vba

无论如何,都可以使用excel vba从数据透视表中获取总和列的范围。我指的范围在下面的屏幕快照中,突出显示为黄色。

pivot table with the last grand total column highlighted; header and grand total row are not highlighted

我尝试在excel中使用宏记录器,以查看它是否可以回答我的问题。这导致我得到这个。

ActiveSheet.PivotTables("PivotTable1").PivotSelect _
    "'Sum of Unit Cost' 'Row Grand Total'", xlDataAndLabel, True

但是,它选择的范围超出了屏幕截图中所需要的范围。

both the data rows and the heading row are selected

我可以做一些事情,例如将选定的内容偏移2行,然后调整其大小以适合预期的范围,但是我想知道是否有更直接的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

您可以使用此代码选择GrandTotals。如果您也需要它,它适用于行和列。最后一部分是删除最后一行(或列)。

Sub SelectGrandTotal()

  Dim pt As PivotTable
  Dim rColumnTotal As Range, rRowTotal As Range
  Dim numrows As Long, numcolumns As Integer
  
  Set pt = ActiveSheet.PivotTables(1)
  
  With pt
  
    'The conditions below are checking if the GrandTotals are activated. Not really necessary in some cases.
    
    'Uncomment this block to work with Columns
    'If .ColumnGrand Then
    '  With .DataBodyRange
    '    Set rColumnTotal = .Rows(.Rows.Count)
    '    rColumnTotal.Select
    '  End With
    'End If

    If .RowGrand Then
      With .DataBodyRange
        Set rRowTotal = .Columns(.Columns.Count)
        rRowTotal.Select
        
      End With
    End If
  End With
  
    'Resizes selection and removes last Row (you can do the same for columns if necessary)
    numrows = Selection.Rows.Count
    numcolumns = Selection.Columns.Count
    Selection.Resize(numrows - 1, numcolumns).Select

End Sub

答案 1 :(得分:0)

尝试将xlDataAndLabel更改为xlDataOnly;请参阅docs.microsoft上的XlPTSelectionMode枚举,或在对象浏览器 F2 )中找到所有可用成员的列表。