【问题标题】:VBA code to overwrite cells through moving /shifting up a range of cellsVBA代码通过移动/向上移动一系列单元格来覆盖单元格
【发布时间】:2015-08-25 16:19:57
【问题描述】:

您好,我有一个数据表,从图片中可以看出,它会不时更改。例如,如果 15 年 3 月有新数据出现,我将不得不从 14 年 4 月到 2014 年 3 月复制和重叠单元格。此后,我将在之前填写 2015 年 2 月信息的空白单元格中填写 15 年 3 月的信息。我想知道是否有任何 vba 代码可以帮助将范围移动或移动到已经具有现有数据的首选单元格行(更多的代码通过移动/向上移动来重叠/覆盖单元格)。

正在考虑 Activecell.offset,但我不确定它是否可以作为单元格范围向上移动。

【问题讨论】:

  • 使用它以文本形式发布您的数据:sensefulsolutions.com/2010/10/format-text-as-table.html。另外,我不确定我是否理解您的上下文中的“重叠”。为什么 3 月 15 日不直接进入下一个空行?
  • 因为数据向上移动了一行,所以包含 2 月 15 日的行本来是空的,所以 3 月 15 日将进入那个空行 @Andre451
  • 那么“3 月 14 日”这一行应该在手术后消失吗?
  • 没错@Andre451

标签: vba excel


【解决方案1】:

在这种情况下,请使用简单的循环来复制值。最后一行 (13) 被第 14 行的空值覆盖。

Public Sub MoveUp()

    Dim sh As Worksheet
    Dim x As Long, y As Long

    Set sh = ActiveSheet ' or the specific sheet

    ' The 12 months
    For y = 2 To 13
        ' Your 7 columns
        For x = 1 To 7
            sh.Cells(y, x) = sh.Cells(y + 1, x)
        Next x
    Next y

    With sh.Cells(13, 1)
        .Select
        ' This only works if your column A contains dates (not strings)
        .Value = DateAdd("m", 1, sh.Cells(12, 1))
    End With

End Sub

如果您的 A 列包含字符串而不是日期,请删除末尾的 DateAdd 行。

【讨论】:

    【解决方案2】:

    可能有多种方法可以做到这一点,但一种简单的方法是(直接来自移动范围和覆盖目标的宏记录器):

    Range("A3:G13").Cut Destination:=Range("A2:G12")
    Range("A13").Select
    

    【讨论】:

    • 它可以工作,但我有一个指向该数据库表的引用表,因此导致另一个表的引用错误!除了切割还有其他解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多