我有一个数据集,其中包含大量有关客户的信息。我希望在Yes输入到 row 中的单元格时将此信息移动到另一个工作表中K,并且包含要从第一个工作表中删除的信息的原始行
我通过按下按钮来完成此操作。工作正常,并且行被删除,但是当然,当它删除该行时,行号会向上移动一位,因此会跳过下一行(第 15 行被删除,然后第 16 行变为第 15 行等),所以我认为反向循环是可行的方法,但我一生都无法弄清楚这一点 - 我认为这很简单!这是我正在使用的代码:
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
Run Code Online (Sandbox Code Playgroud)
我现在只是将行号设置在 1 到 500 之间,当基本功能正常工作时我会更改它。你可以看到我在For Each循环中注释掉了原来的删除方法。我目前收到错误“需要对象” Source.Rows(i.Row).EntireRow.Delete
小智 5
一次删除所有行通常会更有效。
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
Run Code Online (Sandbox Code Playgroud)
(我应该补充一点,我的使用Cells(x,y).EntireRow纯粹是个人喜好。我总是使用该格式,因为我发现它更容易调试。)
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |