0

您好,我创建了以下两个宏,但是它在最后一个带有数据的单元格之后插入一行。我相信这是我的循环条件为Do Until ActiveCell.Value = "". 我想让循环在最后一个有数据的单元格处停止。

我尝试使用变量Do Until Loop_Long = LastRow,但这对我不起作用。

我只想让一个宏在具有不同数据的单元格之间插入一行。然后是一个宏,它将在列中找到空单元格,即我们之前插入的单元格,然后删除该行。

如上所述,问题是它插入了一个额外的行而不是删除它,如果您将值一直放在 A 列中的数据之后的 B 列中,您将明白我的意思。

这是我的代码:

Option Explicit

Sub Macro1()
'Insert Blank Row Between Names
Sheets("Sheet1").Select

Range("A1").Select
Do Until ActiveCell.Value = ""
    If ActiveCell.Value <> ActiveCell.Offset(1).Value Then
        ActiveCell.Offset(1).EntireRow.Insert
        ActiveCell.Offset(1).Select
    End If
    ActiveCell.Offset(1).Select
 Loop
End Sub

Sub Macro2()

Dim LastRow As Long

'Delete Inserted Rows
Sheets("Sheet1").Select
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("A" & LastRow).Select
Do Until ActiveCell.Value = Range("A1")
    If ActiveCell.Value <> ActiveCell.Offset(-1).Value Then
        ActiveCell.Offset(-1).EntireRow.Delete Shift:=xlUp
        ActiveCell.Offset(-1).Select
    End If
    ActiveCell.Offset(-1).Select
Loop
End Sub
4

1 回答 1

0

根据您告诉我的内容,以下代码应该适合您(并且最好遵循最佳实践)...您是否考虑过按原样复制数据,然后在将数据粘贴到新位置后插入行? 那将减少一步。

Option Explicit
'Declare module-level variables.
Dim sht As Worksheet
Dim Cell As Range
Dim NameRng As Range
Dim LastRow As Long

Sub test()
'Add blank rows.
Set sht = ActiveWorkbook.Sheets("Sheet1")
LastRow = sht.Range("A" & Rows.count).End(xlUp).Row

Set NameRng = sht.Range("A1:A" & LastRow)

For Each Cell In NameRng
    If Cell <> Cell.Offset(1, 0) And Cell <> "" Then
        Cell.Offset(1, 0).EntireRow.Insert
    End If
Next Cell

End Sub
Sub test2()
'Delete blank rows.
Set sht = ActiveWorkbook.Sheets("Sheet1")
LastRow = sht.Range("A" & Rows.count).End(xlUp).Row

Set NameRng = sht.Range("A1:A" & LastRow + 1)

For Each Cell In NameRng
    If Cell = "" Then
        Cell.EntireRow.Delete
    End If
Next Cell

End Sub
于 2013-10-21T20:14:10.087 回答