【发布时间】:2013-03-19 04:29:08
【问题描述】:
下面的代码是作为随机样本生成器的一部分编写的。根据发生的总数,它计算样本量并将总体减少到样本量。现在我通过删除总数和样本量之间的差异来做到这一点。我想看看是否有更好的方法来解决这个问题。我在用户定义的列中获取每个值的样本并使用大型数据集,因此采样最终需要几分钟。
有没有办法一次删除我需要的行数,而不是像下面的循环中看到的那样一次删除一个,或者有更好的方法来解决这个问题?谢谢!
x = (Population - SampleSize)
If Population > SampleSize Then
Do Until x = 0
Workbooks(SourceBook).Sheets(SampleSheet).Columns(StratCol) _
.Find(What:=SubPop, After:=Cells(SampRows, StratCol), LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).EntireRow.Delete
x = x - 1
Loop
End If
【问题讨论】:
-
是的,但只能通过添加公式列,如How to delete multiple rows without a loop in Excel VBA - 请参阅我的答案以获取可能的解决方案
-
@ForrestA 请参考类似的帖子。 stackoverflow.com/questions/15375054/…
-
是的,AUtoFilter/Advanced Filter 是另一个选项没有循环,其中不需要使用 SpecialCells
-
澄清一下,我主要是为了更快地达到预期的结果。这是否是一个循环对我来说并不重要,尽管我确实欣赏解决这个问题的方法的多样性。另外,请记住,这是删除具有匹配条件的行的特定部分,而不是全部。非常感谢您的建议!当我有机会试一试时,我会告诉你哪一个最适合我。
-
@ForrestA 任何反馈>
标签: vba loops optimization excel