Vba 案例循环在删除所有值之前终止
我是VBA新手,我试图让我的代码在K行中循环大约10000行整数,并根据值删除行。我的代码可以工作,但一次只能完成一小部分。请告知Vba 案例循环在删除所有值之前终止,vba,excel,Vba,Excel,我是VBA新手,我试图让我的代码在K行中循环大约10000行整数,并根据值删除行。我的代码可以工作,但一次只能完成一小部分。请告知 'Delete unwanted accounts Dim Lcell As Long Application.ScreenUpdating = False Lcell = TransSheet.Cells(Rows.Count, "K").End(xlUp).Row For a = 1 To Lcell Step 1 Select Case Cells(a,
'Delete unwanted accounts
Dim Lcell As Long
Application.ScreenUpdating = False
Lcell = TransSheet.Cells(Rows.Count, "K").End(xlUp).Row
For a = 1 To Lcell Step 1
Select Case Cells(a, 11).Value
Case "1200", "652", "552"
Cells(a, 11).EntireRow.Delete
End Select
Next a
Application.ScreenUpdating = True
试着从最后一行到第一行。您正在删除行,因此您的编号被取消:
'Delete unwanted accounts
Dim Lcell As Long
Application.ScreenUpdating = False
Lcell = TransSheet.Cells(Rows.Count, "K").End(xlUp).Row
For a = Lcell To 1 Step -1
Select Case Cells(a, 11).Value
Case "1200", "652", "552"
Cells(a, 11).EntireRow.Delete
End Select
Next a
Application.ScreenUpdating = True
将这一行添加到代码中
Cells(a, 11).EntireRow.Delete
a = a - 1
这将处理由于行消失而发生的移位
另一方面,我个人使用以下方法删除多行。e、 g.我要删除的行存储在
变量
数组DelRows()
中。您可以在运行时动态获取它们。这里我手动分配一些随机行
Sub DeleteRows()
Dim DelRows() As Variant
ReDim DelRows(1 To 3)
DelRows(1) = 15
DelRows(2) = 18
DelRows(3) = 21
'--- How to delete them all together?
Dim i As Long
For i = LBound(DelRows) To UBound(DelRows)
DelRows(i) = DelRows(i) & ":" & DelRows(i)
Next i
Dim DelStr As String
DelStr = Join(DelRows, ",")
' DelStr = "15:15,18:18,21:21"
ActiveSheet.Range(DelStr).Delete
End Sub
您可以对所有标识的行执行单个删除:
'Delete unwanted accounts
Dim rngDel as range
Dim Lcell As Long, v
Lcell = TransSheet.Cells(Rows.Count, "K").End(xlUp).Row
For a = 1 To Lcell
v = Cells(a, 11).Value
If v = "1200" or v = "652" or v = "552" Then
If Not rngDel is Nothing Then
Set rngDel = Application.Union(rngDel, Cells(a, 11).EntireRow)
Else
Set rngDel = Cells(a, 11).EntireRow
End If
End If
Next a
If Not rngDel Is Nothing Then rngDel.Delete
与其操纵迭代器变量,不如向后迭代:)我认为这是一种有效的方法:递减增量变量使其与行集合保持同步(每个
.Delete
将.Count
减少1),但我认为这是低效的(循环内不必要的额外操作)这也可能是一个坏习惯,因为我们通常只对i=…执行一个,并使用一个迭代器i
作为索引对多个对象并行执行不同的操作,在这种情况下,您可能会得到不想要的结果,除非您为每个被迭代的对象添加另一个变量。当然,这是另一种方法,但就我个人而言,我不会使用它。For/Each
构造是通用的,因此无论是删除工作表中的行、字典中的键或集合中的项等,您都会使用相同/类似的方法。此外,除非您事先知道需要删除的内容,否则您似乎必须对集合进行迭代。是的,因此,与此示例不同,生产代码首先遍历工作表以创建要删除的行的通用字符串,然后在单个操作中删除它。这比逐行执行要复杂一些,但是在Excel中删除是一个非常昂贵的操作,对于性能密集型的内容,它有时会有所帮助。但是+1 abt点regd对/Each
构造重新定义的值。您看到timwilliams的答案了吗?这是另一个简洁的方法。重复:使用Application.Union()的漂亮步骤