每周我都会为一系列项目提取数据并生成数据透视表。几周以来,这些项目中没有一个或多个数据存在。在这种情况下,该项目不会出现在报告中。
为避免手动检查数据表中没有意外排除任何项目,我想手动将“虚拟”项添加到数据透视表中使用的数据。
我非常有信心我可以通过在主要项目表和原始数据之间使用COUNTIF来识别要添加的虚拟项目。我的挑战是数据透视表中的行数每周变化,因此我需要1)识别原始数据报告的最后一行,以及2)在最后一行下面插入虚拟行。
有人可以使用下面的示例建议策略吗?
数据中的项目
AAA
BBB
DDD
FFF
不在手动插入数据中的项
CCC
EEE
我没有收到任何错误,但这不起作用。
Sub DUMMY_ITEMS()
'
' DUMMY_ITEMS Macro
Sheets("Operations").Select
Range("H2:V73").Select
Selection.Copy
Sheets("Raw Data").Select
Dim LastRow As Long
With ActiveSheet
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
答案 0 :(得分:1)
感谢您在评论中的代码是固定版本:
Sub DUMMY_ITEMS()
Dim operationsSheet As Worksheet
Dim rawDataSheet As Worksheet
Dim copyRange As Range
Dim LastRow As Long
Set operationsSheet = Sheets("Operations")
Set rawDataSheet = Sheets("Raw Data")
operationsSheet.Range("H2:V73").Copy
With rawDataSheet
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
rawDataSheet.Cells(LastRow, 1).PasteSpecial xlPasteValues
End Sub
但我强烈建议您查看下面的Offset解决方案,以获得动态数据透视数据源。
最重要的是,有一个巧妙的技巧,可以始终保持您的数据透视表的速度: 创建名称 rData
的命名范围=OFFSET($A$1;;;COUNTA(A:A);COUNTA(1:1))
如果A1是数据透视表的求助,则COUNTA(A:A)计算扩展范围所需的行数(选择为所有记录填充的任何列),以及COUNTA(1:1)计算标题数量。 将rData作为透视源。只要添加行或列,rData就会扩展。不需要宏。
我通常将整个表分配到数据范围
Set currentData = ActiveWorksheet.Range("A1").CurrentRegion
范围(" A1")是数据集的开始
with currentData
lastRow = .rows(.rows.count).row
end with
可能不是最佳方式,但对我有用 然后你就可以使用
了ActiveWorksheet.Cells(lastRow+1,1).Value = "CCC"
ActiveWorksheet.Cells(lastRow+2,1).Value = "EEE"
或者您可以使用偏移量
Set rangeToFill = ActiveWorksheet.Cells(lastRow,1)
rangeToFill.offset(1,0).value ="CCC"
rangeToFill.offset(2,0).value ="EEE"
希望这有一些帮助。