Общая ссылка на диапазон сводной таблицы для Excel VBA

#excel #vba

#excel #vba

Вопрос:

Я хотел бы просто получить значение общего итога сводной таблицы. Однако мне нужно, чтобы это было более динамичным, чем решение, найденное в Интернете.

введите описание изображения здесь

Простое решение, которое я видел в Интернете, заключалось в том, чтобы получить последнюю ячейку, найденную в диапазоне столбца общего итога. В этом случае это приводит к чему-то вроде кода, упомянутого ниже.

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

Однако это просто не сработало бы, если бы у меня были некоторые данные, заполненные под сводной таблицей, в том же столбце. Есть ли способ точно ссылаться на общее итоговое значение? Может быть, например, ссылаться на диапазон данных двух столбцов и строк общего объема и находить пересечение между ними, чтобы ячейка выделялась желтым цветом?

Редактировать:

Как насчет получения общего итога для двух разных столбцов значений данных

введите описание изображения здесь

Ответ №1:

Ну, поскольку это будет самая нижняя правая ячейка в вашей сводной таблице:

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

Комментарии:

1. Это сработало бы, если бы в сводной таблице было только одно значение данных. хотел бы знать, что, если бы у меня было два значения данных, каждое из которых имеет свой отдельный столбец общего итога. Как я могу получить два разных значения общего итога соответственно?

2. Вы имеете в виду, что хотели бы получить общее количество, например, для Востока и Запада? Если нет, лучше всего показать пример в вашем вопросе (отредактируйте его)

3. Я мог бы просто продолжить использовать ваш пример и просто взять вторую последнюю ячейку в диапазоне данных, я думаю, если нет конкретного способа отличить эти общие ячейки.

4. 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