#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