我有以下宏来读取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
答案 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