【问题标题】:Macro Find Last Row and Add Data宏查找最后一行并添加数据
【发布时间】:2017-06-08 07:47:21
【问题描述】:

每周我都会提取一系列项目的数据并生成数据透视表。有几个星期,这些项目中的一项或多项不存在数据。在这种情况下,该项目不会出现在报告中。

为避免手动检查没有意外从数据透视表中排除任何项目,我想手动将“虚拟”项目添加到数据透视表中使用的数据中。

我非常有信心可以通过在主项目表和原始数据之间使用 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

【问题讨论】:

  • 如果您是finding the last row,请查看链接。添加数据并不难。
  • 所以我没有收到任何错误,但这不起作用。非常感谢任何帮助! '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' @l42; @tackgnol

标签: vba excel


【解决方案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

其中 Range("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"

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多