Excel 宏 - 复制行 -> 在下方插入行 -> 粘贴数据
Excel Macro - Copy Row -> Insert Row under -> Paste data
我有一个代码贯穿 E 列(下面示例中的 C 列)并搜索数据中的任何更改。然后它在该更改下插入一个空白行并循环遍历数据集(200-500 行长)。我正在寻找一种方法 modify/add 将更改前最后一行数据的“复制和粘贴”功能编码到新插入的行中。
之前:
Column A
Column B
Column C
Column E
1
2
Sally
5
1
2
Sally
6
1
2
Sally
2
1
2
Chase
1
1
2
Chase
4
1
2
Ben
9
之后:
Column A
Column B
Column C
Column E
1
2
Sally
5
1
2
Sally
6
1
2
Sally
2
2
Sally
1
2
Chase
1
1
2
Chase
4
2
Chase
1
2
Ben
9
2
Ben
对不起。新来的。我目前的代码有一个循环。见下图:
Sub CleanUpPart2()
'Insert Rows by column F
'
Dim iRow As Integer, iCol As Integer
Dim oRng As Range
Set oRng = Range("f1")
iRow = oRng.Row
iCol = oRng.Column
Do
'
If Cells(iRow + 1, iCol) <> Cells(iRow, iCol) Then
Cells(iRow + 1, iCol).EntireRow.Insert Shift:=xlDown
iRow = iRow + 2
Else
iRow = iRow + 1
End If
'
Loop While Not Cells(iRow, iCol).Text = ""
'
已编辑::
请尝试更新后的代码:
Sub testInsertRowCopyBefore()
Dim sh As Worksheet, lastRow As Long, i As Long
Set sh = ActiveSheet
lastRow = sh.Range("A" & Rows.count).End(xlUp).row
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = lastRow + 1 To 3 Step -1
If sh.Range("C" & i).Value <> sh.Range("C" & i - 1).Value Then
sh.Range("C" & i).EntireRow.Insert xlUp
sh.Range("B" & i & ":C" & i).Value = sh.Range("B" & i - 1 & ":C" & i - 1).Value
End If
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Ready..."
End Sub
以上代码假定“A 列”、“B 列”和“C 列”为 headers,它们位于 sheet 第一行。
请测试并发送一些反馈
我有一个代码贯穿 E 列(下面示例中的 C 列)并搜索数据中的任何更改。然后它在该更改下插入一个空白行并循环遍历数据集(200-500 行长)。我正在寻找一种方法 modify/add 将更改前最后一行数据的“复制和粘贴”功能编码到新插入的行中。
之前:
Column A | Column B | Column C | Column E |
---|---|---|---|
1 | 2 | Sally | 5 |
1 | 2 | Sally | 6 |
1 | 2 | Sally | 2 |
1 | 2 | Chase | 1 |
1 | 2 | Chase | 4 |
1 | 2 | Ben | 9 |
之后:
Column A | Column B | Column C | Column E |
---|---|---|---|
1 | 2 | Sally | 5 |
1 | 2 | Sally | 6 |
1 | 2 | Sally | 2 |
2 | Sally | ||
1 | 2 | Chase | 1 |
1 | 2 | Chase | 4 |
2 | Chase | ||
1 | 2 | Ben | 9 |
2 | Ben |
对不起。新来的。我目前的代码有一个循环。见下图:
Sub CleanUpPart2()
'Insert Rows by column F
'
Dim iRow As Integer, iCol As Integer
Dim oRng As Range
Set oRng = Range("f1")
iRow = oRng.Row
iCol = oRng.Column
Do
'
If Cells(iRow + 1, iCol) <> Cells(iRow, iCol) Then
Cells(iRow + 1, iCol).EntireRow.Insert Shift:=xlDown
iRow = iRow + 2
Else
iRow = iRow + 1
End If
'
Loop While Not Cells(iRow, iCol).Text = ""
'
已编辑::
请尝试更新后的代码:
Sub testInsertRowCopyBefore()
Dim sh As Worksheet, lastRow As Long, i As Long
Set sh = ActiveSheet
lastRow = sh.Range("A" & Rows.count).End(xlUp).row
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = lastRow + 1 To 3 Step -1
If sh.Range("C" & i).Value <> sh.Range("C" & i - 1).Value Then
sh.Range("C" & i).EntireRow.Insert xlUp
sh.Range("B" & i & ":C" & i).Value = sh.Range("B" & i - 1 & ":C" & i - 1).Value
End If
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Ready..."
End Sub
以上代码假定“A 列”、“B 列”和“C 列”为 headers,它们位于 sheet 第一行。
请测试并发送一些反馈