首页 > 解决方案 > 帮助提高循环效率

问题描述

首先让我感谢您在这方面的帮助,因为我对 VBA 比较陌生。

目前我有一个loop贯穿 5columns以清除任何rows没有价值的Column A东西,然后它贯穿其他 4columns以匹配另一个sheet中的数据workbook。我已经研究了多种方法来更有效地做到这一点,但没有运气。下面是loop我目前正在使用的。我想要一些想法,以便代码更有效地运行。

Dim wsDE As Worksheet
Dim wsMasterList As Worksheet
Dim City As Range
Dim State As Range
Dim AgeL As Range
Dim AgeU As Range
Dim Gender As Range
Dim x As Long
Dim lastx As Long

Set wsDE = ThisWorkbook.Sheets("DataEntry")
Set wsMasterList = ThisWorkbook.Sheets("MasterList")
Set City = wsDE.Range("B1")
Set State = wsDE.Range("C1")
Set AgeL = wsDE.Range("D1")
Set AgeU = wsDE.Range("E1")
Set Gender = wsDE.Range("F1")

lastx = wsMasterList.Range("A" & wsMasterList.Rows.Count).End(xlUp).Row
wsMasterList.Range("A1").Select

For x = 2 To lastx
    If wsMasterList.Range("A" & x) = vbNullString Then
        wsMasterList.Range("A" & x).EntireRow.Delete
        GoTo NX
    End If
    If City <> "N/A" Then
        If wsMasterList.Range("I" & x).Value <> UCase(City) Then
            wsMasterList.Range("I" & x).EntireRow.Delete
            GoTo NX
        End If
    End If
    If State <> "N/A" Then
        If wsMasterList.Range("J" & x).Value <> UCase(State) Then
            wsMasterList.Range("J" & x).EntireRow.Delete
            GoTo NX
        End If
    End If
    If AgeL <> "N/A" Then
        If wsMasterList.Range("E" & x) < AgeL Then
            wsMasterList.Range("E" & x).EntireRow.Delete
            GoTo NX
        End If
    End If
    If AgeU <> "N/A" Then
        If wsMasterList.Range("E" & x) > AgeU Then
            wsMasterList.Range("E" & x).EntireRow.Delete
            GoTo NX
        End If
    End If
    If Gender = "Male" Then
        If wsMasterList.Range("D" & x) <> "M" Then
            wsMasterList.Range("D" & x).EntireRow.Delete
            GoTo NX
        End If
    End If
    If Gender = "Female" Then
        If wsMasterList.Range("D" & x) <> "F" Then
            wsMasterList.Range("D" & x).EntireRow.Delete
            GoTo NX
        End If
    End If

NX:
Next x

标签: vbaexcelexcel-2013

解决方案


我要给出的唯一建议是订购您的支票,以确保它们是按删除行的最常见情况订购的。这减少了必须检查的“If”语句的数量。因此,如果 AgeL 通常删除最多的记录,它应该是您的第一次检查,然后应该是下一个最常见的成功检查,依此类推。这样可以减少您必须执行的检查次数。这不是一个巨大的收益,但它会帮助一些人。


推荐阅读