用于插入行和填充的宏

时间:2017-06-13 18:05:26

标签: excel vba excel-vba

我有一组如下图所示的数据,我想要有条件地过滤。具体来说,在Amount列上 - 如果单元格值为197,我希望能够在其下方插入2个空白行,并使用原始行中的精确数据副本或增加时间戳的简单公式填充它。

Data Set/Table

我对VBA对象并不熟悉,所以我一直在寻找并尝试不同的东西,但我觉得我可能会遗漏一些明显的东西。在创建的下两行中,我想为每一行增加一个月的时间戳(创建(UTC)列),并复制所有其他数据。我不确定如何写一个填充的宏,并希望得到任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

这样的事情应该可以解决问题。

确保您使用要更新的工作表(它使用ActiveSheet

运行它
Sub InsertAndUpdate()
Dim x As Long
For x = ActiveSheet.UsedRange.Rows.CountLarge To 2 Step -1
    If Cells(x, "B").Value = 197 Then
        Cells(x + 1, "B").EntireRow.Insert
        Cells(x + 1, "B").EntireRow.Insert
        Cells(x, "B").EntireRow.Copy Cells(x + 1, "B").EntireRow
        Cells(x, "B").EntireRow.Copy Cells(x + 2, "B").EntireRow
        Cells(x + 1, "A").Value = DateAdd("m", 1, Cells(x + 1, "A").Value)
        Cells(x + 2, "A").Value = DateAdd("m", 2, Cells(x + 2, "A").Value)
    End If
Next x
End Sub

你也可以稍微缩短它,但是使用嵌套循环来实现这么简单的事情就好了......

Sub InsertAndUpdate()
Dim x As Long, y As Integer
For x = ActiveSheet.UsedRange.Rows.CountLarge To 2 Step -1
    If Cells(x, "B").Value = 197 Then
        For y = 1 To 2
            Cells(x + y, "B").EntireRow.Insert
            Cells(x, "B").EntireRow.Copy Cells(x + y, "B").EntireRow
            Cells(x + y, "A").Value = DateAdd("m", y, Cells(x + y, "A").Value)
        Next y
    End If
Next x
End Sub

结果(我添加的行突出显示)

Results