vba - 帮助提高循环效率
问题描述
首先让我感谢您在这方面的帮助,因为我对 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
解决方案
我要给出的唯一建议是订购您的支票,以确保它们是按删除行的最常见情况订购的。这减少了必须检查的“If”语句的数量。因此,如果 AgeL 通常删除最多的记录,它应该是您的第一次检查,然后应该是下一个最常见的成功检查,依此类推。这样可以减少您必须执行的检查次数。这不是一个巨大的收益,但它会帮助一些人。
推荐阅读
- java - 我想从列表中删除已完成的订单
- python - BeautifulSoup 看不到元素,即使它出现在页面上
- java - JavaFX - 不能在 MenuItem 中使用下划线
- json - JSON序列化后子类属性崩溃
- c# - Postgres C# 触发函数
- javascript - 如果 Map 只有一个成员,如果您不知道密钥,如何在不循环的情况下获取它?
- html - 如何在每个段落中赋予颜色
- postgresql - Postgres 索引只有一个整数组合
- integer - MIPS 控制台输出中出现意外的十进制值
- c# - 使用 Image.source 时的 C# WPF 内存泄漏