繁体   English   中英

将 Pivot 表总计复制到下一个空单元格

[英]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。

Pivot 总计到指定单元

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM