行插入宏未完成整个工作表

时间:2016-08-16 17:58:49

标签: excel-vba vba excel

我有以下宏来读取Sheet1上的行并插入该行数并复制Sheet2上的数据。它仅适用于1次迭代。

Sub InsertRow()

Dim ws2 As Worksheet
Dim sh As Worksheet
Dim rw As Range
Dim RowCount As Integer

Set sh = Sheet1
Set ws2 = Sheet2

RowCount = 0
For Each rw In sh.Rows
    If sh.Cells(rw.Row, 1).Value = "" Then
        Exit For
    Else
        ws2.Rows(rw.Row).Copy
        ws2.Rows(rw.Row + 1).Insert Shift:=xlDown
    End If

RowCount = RowCount + 1

Next rw

ws2.Rows(1).Delete
MsgBox ("Done")

End Sub

我需要帮助弄清楚如何告诉它继续前进,直到遇到两个连续的空白单元格才结束。工作表将始终由一个空行和数据分隔,直到工作表结束。现在我已经删除了标题,因为它总是从那里开始,我得到一堆重复的标题行而不是数据行。有没有办法告诉它开始在第2行插入然后继续迭代直到2个连续的空白行?删除需要在每次迭代结束时,因为插入将始终为X,并且由于 Sheet2 上已存在一行,因此我将始终需要X-1。

Sheet1的示例工作表就是这样,对于Sheet2上存在的每一行,它将插入一行并复制sheet1上该行中已有的数据。当插入所有行时,我将把列B,C和D移到Sheet2并删除Sheet1

ColA    ColB    ColC       ColD
Srvr    9          12      Data
Srvr2   7          22      Data
Srvr9   15         14      Data
Blank row    
Srvr3   17         18      Data
Srvr19  18         27      Data
blank row

2 个答案:

答案 0 :(得分:1)

快速修改应该继续代码,直到两个空白行:

If sh.Cells(rw.Row, 1).Value = "" Then更改为If sh.Cells(rw.Row, 1).Value = "" And sh.Cells(rw.Row+1, 1).Value = "" Then

我不知道你在问题的最后要问的是关于开始在第2行和第x-1行插入等等。

答案 1 :(得分:1)

我最终选择了以下内容来完成任务。 @PartyHatPanda感谢您帮我找到2个空行背靠背。我将其纳入我的最终代码中。我添加了一个ElseIf并且这样做了。为了处理空白行,我把它们留在那里,那些行与复制和粘贴排成一行,然后我写了一个删除子来摆脱空行。

Sub InsertRow()

Dim ws2 As Worksheet
Dim sh As Worksheet
Dim rw As Range
Dim RowCount As Integer

Set sh = Sheet1
Set ws2 = Sheet2

RowCount = 0
For Each rw In sh.Rows
    If sh.Cells(rw.Row, 1).Value = "" And sh.Cells(rw.Row + 1, 1).Value = "" Then
        Exit For
    ElseIf sh.Cells(rw.Row, 1).Value = "" Then
        ws2.Rows(rw.Row).ClearContents
    Else
        ws2.Rows(rw.Row).Copy
        ws2.Rows(rw.Row + 1).Insert Shift:=xlDown
    End If

'RowCount = RowCount

Next rw

MsgBox ("Done")

End Sub