[英]Copy Pivot Table Grand Total to next empty cell
所以我有一个 Pivot 表,位于 N,O 列,有一个总计行,我想将该总计复制到“R”列列表中的下一个空单元格。 我找到了一个可以将总计复制到一个单元格的代码,但我无法将其复制到下一个空单元格中。
Dim rngPvt As Range, sht As Worksheet, valToFind$, gtv
Set sht = Sheets("Sheet1")
Set rngPvt = sht.PivotTables("1").RowRange
valToFind = sht.PivotTables("1").GrandTotalName
Set gtv = rngPvt.Find(valToFind, , xlFormulas)
'assumes value to the right of field name
Sheets("Sheet1").Cells(LastRow, 18).PasteSpecial xlPasteValues = gtv.Offset(, 1)
尝试这个..
Sub test()
Dim wb As Workbook
Set wb = ThisWorkbook
Dim sh As Worksheet
Set sh = wb.Sheets("Sheet1")
Dim pt As PivotTable
Set pt = sh.PivotTables("PivotTable1")
Dim FinalPvtGT As Range
Set FinalPvtGT = pt.TableRange1(pt.TableRange1.Rows.Count, _
pt.TableRange1.Columns.Count)
Dim targetCell As Range
Set targetCell = FinalPvtGT.Offset(, 3)
targetCell = FinalPvtGT
End Sub
在 R 列的最后一个填充单元格之后,您是否期待它? 如果是这样,则替换以下行
Set targetCell = FinalPvtGT.Offset(, 3)
和
Set targetCell = Range("R" & sh.Rows.Count).End(xlUp).Offset(1, 0)
这是一个代码,也许您可以将其实现到您的代码中:
Sub test()
Set sht = Sheets("Sheet1")
Set pt1 = sht.PivotTables(1)
Set pt2 = sht.PivotTables(2)
Range("E26").Value = pt1.GetPivotData("SUM").Value
Range("B26").Value = pt2.GetPivotData("SUM").Value
End Sub
总计需要复制到 R 列中的下一个空行
哎呀,对不起,
所以你的问题是复制的 GrandTotal 的位置:)。
我找到了一个可以将总计复制到一个单元格的代码,但我无法将其复制到下一个空单元格中
Sheets("Sheet1").Cells(LastRow, 18).Select
如果您逐步运行上面的代码,活动单元格的结果是否正确? 正如您所料,活动单元格的结果是下一个空单元格。
如果不正确,那么您可能需要在 .select 之前添加.select
.offset(1,0)
。 但我仍然不知道你的“LastRow”变量的值是多少。 如果该值是工作表中的最后一行编号(我的是 1048576),那么您可能需要输入.end(xlup).offset(1,0)
如果它是正确的,我想知道有什么问题?
也可以使用上面的代码来完成:
Sheets("Sheet1").Cells(LastRow, 18).value = pt1.GetPivotData("SUM").Value
“SUM”一词取决于您的 pivot 表 GrandTotal 列 header 名称是什么。 如上图所示,我的是 SUM。
此代码不依赖于 pivot 表 GrandTotal 显示的行。 因此,您不必先编写代码来查找 pivot 表 GrandTotal 的单词,然后再使用 offset(0,1) 来获取值。 例如,如果起初 GrandTotal 显示在第 200 行,而在数据源更改并刷新第 1000 行的 GrandTotal 显示后,它将始终为您提供正确的 GrandTotal。
Option Explicit
Sub PivotGrandTotal()
Const SheetName As String = "Sheet1"
Const writeColumn As Long = 18
Dim rng As Range ' PivotTable's RowRange, Last Non-Empty Cell
Dim findString As String ' PivotTable's GrandTotalName
' If certain that whole number, then use "As Long" in the following line.
Dim gTotal As Double ' Grand Total Value
Dim FER As Long ' Write Row (First Empty Row)
With ThisWorkbook.Worksheets(SheetName)
' Retrieve Grand Total.
With .PivotTables(1)
findString = .GrandTotalName
Set rng = .RowRange
End With
gTotal = rng.Find(findString, , xlFormulas).Offset(, 1).Value
' Define writeRow.
Set rng = .Columns(writeColumn).Find("*", , xlFormulas, , , xlPrevious)
If Not rng Is Nothing Then FER = rng.Row + 1 Else FER = 1
' Write to writeCell.
.Cells(FER, writeColumn).Value = gTotal
End With
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.