我有一个数据集,我需要找到大于" X"的所有日期。在范围内。然后我需要清除符合该标准的任何单元格的内容。我当前的代码循环遍历每一列,AutoFilters基于UserForm提供的变量" gDate,"然后清除任何可见的细胞。数据集可以大到54列和1,000多行。
我还是VBA的新手,我知道创建循环可能不是最佳的。话虽如此,是否有更快,更有效的方式来完成我的任务?
Sub FilterDates()
Dim ws2 As Worksheet
Dim rng As Range
Dim gDate As Date
Dim LastRow2 As Long, LastCol2 As Long
Set ws2 = Sheets("Sheet2")
LastRow2 = ws2.Cells(Rows.count, 1).End(xlUp).row
LastCol2 = ws2.Cells(1, Columns.count).End(xlToLeft).Column
gDate = Sheets("UFinput").Cells(2, 1)
Set rng = ws2.Range(Cells(1, 1), Cells(LastRow2, LastCol2))
'Loops through columns filtering dates > gDate then clears
With rng
On Error Resume Next
Dim iLoop As Long
For iLoop = 5 To LastCol2
.AutoFilter Field:=iLoop, Criteria1:=">" & gDate
ws2.Range(Cells(2, iLoop), Cells(LastRow2, iLoop)).SpecialCells(xlCellTypeVisible).ClearContents
.AutoFilter Field:=iLoop
Next iLoop
End With
ws2.AutoFilterMode = False
End Sub
答案 0 :(得分:0)
因为某种原因而被称为挥发性公式。每次工作簿发生变化时,NOW,TODAY,INDIRECT,RAND,OFFSET等函数都会重新计算。
例如,如果您在单元格中使用NOW函数,则每次工作表中都有更改时,将重新计算公式并更新单元格值。
这需要额外的处理速度,最终会得到一个缓慢的Excel工作簿。
根据经验,避免使用不稳定的公式。如果你不能,尽量减少它的使用。 2.使用辅助列
Helper列是Excel中评价最低的设计构造之一。我见过很多人回避创建帮助列。
不要那样做。
使用'Helper Columns'的最大好处是它可以帮助您避免使用数组公式。
现在不要误会我的意思。我不反对数组公式。相反,我相信在某些情况下这些可能会很棒。但是,当您尝试使用一个长公式来完成所有操作时,它确实会影响Excel工作簿的性能。这里和那里的几个数组公式不应该受到伤害,但是如果你需要在很多地方使用它,请考虑使用辅助列。
以下是一些使用辅助列的示例:
Automatically Sort Data in Alphabetical Order using Formula.
Dynamic Excel Filter – Extract Data as you Type.
Creating Multiple Drop-down Lists in Excel without Repetition.
数组公式有其自身的优点 - 但速度不是其中之一。
如上所述,数组公式可以占用大量数据(单元格引用),对其进行分析,并为您提供结果。但这样做需要时间。
如果有办法避免数组公式(例如使用辅助列),请始终采取这种方式。 4.谨慎使用条件格式
我非常喜欢条件格式化。它让平淡的数据看起来如此美丽。现在你可以简单地查看单元格的颜色或图标,而不是自己进行比较,而是知道它与其他人的比较。
但是......这就是问题所在。
没有多少Excel用户知道Excel条件格式是易失性的。虽然您可能没有注意到小数据集的差异,但如果应用于大型数据集或多次应用,可能会导致excel电子表格变慢。
建议 - 谨慎使用。 5.使用Excel表格和命名范围
Excel表格和命名范围是两个令人惊叹的功能,可以保存您的数据并使参考变得非常容易。它可能需要一段时间才能适应它,但是当你开始使用它时,生活变得轻松而快速。
在创建数据驱动的仪表板时,将数据转换为Excel表几乎总是一个好主意。
它还具有使您的公式更易于理解的附加优势。
例如,什么更容易理解?
=销售价格 - 成本价格OR = SUM(A1:A10)-SUM(G1:G10) 6.将未使用的公式转换为静态值
这是一个明智的做法。当你不需要它时,不要保留它。
许多公式会导致Excel工作簿速度变慢。如果你有甚至没有被使用的公式 - 你知道应该责怪谁。根据经验,如果您不需要公式,最好将它们转换为静态值(通过粘贴为值)。
阅读更多:如何快速将公式转换为值。
这可能并非总是可行,但如果你能做到这一点,我保证你的Excel表格会变得更快。
逻辑很简单 - 工作表中的公式不必在同一张表中的数据旁边获取数据。 8.避免使用整行/列作为参考(A:A)
我在列表中有这个的唯一原因是我看到很多人在公式中使用整个行/列引用。这是一种不好的做法,应该避免。
虽然您可能认为行/列只有几个包含数据的单元格,但Excel并不这么认为。当您引用整个行/列时,Excel将其视为一个好的服务员并检查它。这需要更多的时间进行计算。 9.使用手动计算模式
我只是重复在各种论坛和博客中已经说过的百万人。使用手动计算可以让您灵活地告诉excel何时计算,而不是Excel自己做出决定。这不会加速您的Excel工作簿,但如果您的Excel电子表格速度较慢,则无需一次又一次地重新计算Excel,从而节省了时间。
To switch to manual mode, go to Formula Tab –> Calculation Options –> Manual (press F9 key to recalculate)
慢速Excel电子表格 - 手动计算 10.使用更快的公式技术
Excel为您提供了许多公式和公式组合来做同样的事情。最好识别和使用最快的。
以下是几个例子:
Use IFERROR instead of IF and ISERROR combo (unless you are using Excel 2003 or earlier, which does not have IFERROR).
Use MAX(A1,0) instead do IF(A1>0,A1,0) – This is a cool tip that I learned from Mr. Excel aka Bill Jelen. His research shows that MAX option is 40% faster than IF option (and I am ready to take this stat on his face value).
Use the INDEX/MATCH combo, instead of VLOOKUP – This may raise a lot of eyebrows, but the truth is, there is no way VLOOKUP can be faster if you have 100’s of columns of data. The world is moving towards INDEX/MATCH, and you should make the shift too.
[If you are still confused about what to use, here is a head-on-head comparison of VLOOKUP Vs. INDEX/MATCH].
Use — (double negatives) to convert TRUE’s and FALSE’s to 1’s and 0’s (instead of multiplying it by 1 or adding 0 to it). The speed improvement is noticeable in large data sets.
这是一份详尽的清单吗?绝对不。这些是一些我认为值得分享的优秀作为起点。