基于整数变量的VBA排序表
我创建了一个循环,可以计算A列中使用ping背景着色的单元格数。如果单元格不是粉红色,则删除整行。每次执行此循环时,大约有400行,循环速度非常慢。我想将我创建的循环更改为其他内容 我只想检查从第二行到最后一行(代码中的I到LR_Double),然后将A列中的所有行标记为“j”。之后,我想对行进行排序,使所有“j”行都排在第一位,并删除其他行 另一个问题是,可能根本不会有任何背景为粉红色的单元格。这是我的代码的相关部分:基于整数变量的VBA排序表,vba,excel,Vba,Excel,我创建了一个循环,可以计算A列中使用ping背景着色的单元格数。如果单元格不是粉红色,则删除整行。每次执行此循环时,大约有400行,循环速度非常慢。我想将我创建的循环更改为其他内容 我只想检查从第二行到最后一行(代码中的I到LR_Double),然后将A列中的所有行标记为“j”。之后,我想对行进行排序,使所有“j”行都排在第一位,并删除其他行 另一个问题是,可能根本不会有任何背景为粉红色的单元格。这是我的代码的相关部分: Public tmpFile As Workbook Public LR_
Public tmpFile As Workbook
Public LR_Double As Long
Public i As Long
Public j As Long
LR_Double = .Cells(Rows.Count, "A").End(xlUp).Row
With tmpFile.Worksheets(2)
' i row number
' j duplicates number
j = 0
For i = LR_Double To 2 Step - 1
If .Cells(i, "A").Interior.Color = 13551615 Then
j = j + 1
Else
.Cells(i, "A").EntireRow.Delete
End If
Next i
End With
类似于(在forLR_Double
和tempFile
中使用伪值;以及局部变量而不是全局变量)<代码>i和计数器
将初始化为0,但我想明确指出:
Public Sub test()
Dim tmpFile As Workbook
Dim LR_Double As Long
Dim i As Long
Dim counter As Long
i = 0
LR_Double = 6
counter = 0
Set tmpFile = ThisWorkbook
Dim ws As Worksheet
Set ws = tmpFile.Worksheets(2)
With ws
For i = 2 To LR_Double
If .Cells(i, "A").Interior.Color = 13551615 Then
.Cells(i, "A").Value = "j"
counter = counter + 1
Else
.Cells(i, "A").Value = vbNullString
End If
Next i
Dim sortRange As Range
Set sortRange = ws.Range("A1:A" & LR_Double)
SortData sortRange
.Range("A" & 2 + counter & ":A" & LR_Double).EntireRow.Delete
End With
End Sub
Private Sub SortData(ByVal sortRange As Range)
sortRange.Sort key1:=sortRange.Cells(1, 1), _
order1:=xlDescending, Header:=xlYes
End Sub
粉红色而不是ping?;-)您是否在其他代码中引用了这些公共变量?我只是想知道它们的实际范围。另外,在一个反方向运行的循环中减少i的错误做法。LR_Double的值是多少?它是如何计算的?是否应该将.Cells(i,“A”)=“j”放在if条件为真的情况下,去掉当前代码的Else部分,然后在最后简单地对范围进行降序排序(“A2:A”&LR_Double)-假设col A中没有其他内容(否则使用代码的Else部分并拥有.Cells(i,“A”)=vbNullString。删除行时,最好向后处理行:“对于i=LR_加倍到2步骤-1”,这样就不需要“i=i-1”循环。