我有一个数据集,其中包含有关客户的大量信息。我希望在将Yes
输入到行K
的单元格中并且将包含要从第一个工作表中删除的信息的原始行中输入Private Sub UpdateSheet2_Click()
Dim c As Range
Dim Source As Worksheet
Dim Target As Worksheet
'Change worksheet designation as needed
Set Source = ActiveWorkbook.Worksheets("Sheet1")
Set Target = ActiveWorkbook.Worksheets("Sheet2")
For Each c In Source.Range("K:K") 'Covers all rows
If c = "yes" Then
Source.Range("A" & c.Row & ":B" & c.Row).Copy Target.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
Source.Range("D" & c.Row & ":F" & c.Row).Copy Target.Range("C" & Rows.Count).End(xlUp).Offset(1, 0)
Source.Range("H" & c.Row & ":J" & c.Row).Copy Target.Range("F" & Rows.Count).End(xlUp).Offset(1, 0)
End If
' If c = "yes" Then
' Source.Rows(c.Row).EntireRow.Delete
' End If
Next c
For i = 500 To 1 Step -1
If Source.Range("K" & i) = "yes" Then
Source.Rows(i.Row).EntireRow.Delete
End If
Next i
End Sub
到另一个工作表中
我正在按下按钮。工作正常,并且行被删除,但是当然,当它删除行时,行号向上移动一个,因此下一行被跳过(删除行15,然后行16变为行15,依此类推),所以我想出了一个反向循环是可行的方法,但是我无法一生解决这个问题-我认为这很简单!这是我正在使用的代码:
Source.Rows(i.Row).EntireRow.Delete
我现在只是将行号设置在1到500之间,当基本功能正常运行时,我将对其进行更改。您可以在For Each循环中看到我注释掉原始删除方法的位置。我目前在第.main-list
行上出现错误“ Object required”
答案 0 :(得分:3)
通常一次删除所有行效率更高。
Set c = Nothing 'reset your range
For i = 1 To 500 'or 500 To 1 Step -1 - doesn't make a difference
If Source.Range("K" & i) = "yes" Then
If c Is Nothing Then
Set c = .Cells(i, 1).EntireRow 'if the range is empty then set it to the required row
Else
Set c = Union(c, .Cells(i, 1)).EntireRow 'otherwise add this row
End If
End If
Next
If Not c Is Nothing Then c.Delete xlUp 'if the range is not empty then delete all the rows
(我应该补充一点,我对Cells(x,y).EntireRow
的使用纯粹是个人喜好。我总是使用该格式,因为我发现它更易于调试。)