Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于整数变量的VBA排序表_Vba_Excel - Fatal编程技术网

基于整数变量的VBA排序表

基于整数变量的VBA排序表,vba,excel,Vba,Excel,我创建了一个循环,可以计算A列中使用ping背景着色的单元格数。如果单元格不是粉红色,则删除整行。每次执行此循环时,大约有400行,循环速度非常慢。我想将我创建的循环更改为其他内容 我只想检查从第二行到最后一行(代码中的I到LR_Double),然后将A列中的所有行标记为“j”。之后,我想对行进行排序,使所有“j”行都排在第一位,并删除其他行 另一个问题是,可能根本不会有任何背景为粉红色的单元格。这是我的代码的相关部分: Public tmpFile As Workbook Public LR_

我创建了一个循环,可以计算A列中使用ping背景着色的单元格数。如果单元格不是粉红色,则删除整行。每次执行此循环时,大约有400行,循环速度非常慢。我想将我创建的循环更改为其他内容

我只想检查从第二行到最后一行(代码中的I到LR_Double),然后将A列中的所有行标记为“j”。之后,我想对行进行排序,使所有“j”行都排在第一位,并删除其他行

另一个问题是,可能根本不会有任何背景为粉红色的单元格。这是我的代码的相关部分:

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
类似于(在for
LR_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”循环。