在Excel VBA中的日期值之后插入x行

时间:2016-09-16 21:58:18

标签: excel vba excel-vba

我想在单元格值之后插入x行x =12,即日期,我的代码不起作用,请帮助,

Sub HHRowInserter()
Dim HHRw As Range
For Each HHRw In Range("A1:A2251")
If HHRw.Value Like #9/30/2017# Then   'mm/dd/yyyy '30-Sep-17
HHRw.Offset(12, 0).EntireRow.Insert
End If
Next HHRw
End Sub

1 个答案:

答案 0 :(得分:1)

以下代码行是在HHRw以下12行的位置插入一行:

HHRw.Offset(12, 0).EntireRow.Insert

要插入12行,您需要声明12行范围:

Range(HHRw.Offset(1).Address & ":" & HHRw.Offset(12).Address).EntireRow.Insert

请记住,For循环从第1行到第2251行循环。当您找到日期并粘贴12行时,然后将粘贴位置下方的所有内容向下推12行。当您到达第2251行时,您可能会有超出此行的大量内容,并且For循环不会检查此内容。

解决这个问题的一种方法是重新检查上次使用的行并将循环转换为Do While:

Sub RowInserter()

    Dim LastRow As Integer, LoopCounter As Integer
    Dim TestCell As Range

    LoopCounter = 1
    LastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
    Do While LoopCounter <= LastRow
        Set TestCell = Range("A" & LoopCounter)
        If IsDate(TestCell.Value) Then
            If DateValue(TestCell.Value) = DateValue("30-Sep-2017") Then
                Range(TestCell.Offset(1).Address & ":" & TestCell.Offset(12).Address).EntireRow.Insert
                LoopCounter = LoopCounter + 13
            Else
                LoopCounter = LoopCounter + 1
            End If
        Else
            LoopCounter = LoopCounter + 1
        End If
        LastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
    Loop

End Sub