- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基于 on another question在这个网站上,我开始想知道删除具有特定条件的所有行的最快方法。
上面提到的问题有各种解决方案:
(1)循环遍历工作表上的所有行(向后),将所有满足条件的行一一删除。
(2) 首先将适用范围移动到数组中,然后评估数组中的条件,并在此基础上一一删除底层工作表上的所有行。
一个可能的改进可能是删除 block 中的所有行以减少访问工作表的开销。但是如果你走这条路,那么在你实际删除它们之前,你有多种选择来“存储”这些范围:
(1) 使用Intersect
合并应该删除的范围。
(2) 简单写一个String
所有要删除的行。
那么,最快的方法是什么?
最佳答案
一种有效的解决方案是通过对标签进行排序来标记所有行以保留并在最后移动所有行以删除。
这样,复杂性不会随着要删除的行数而增加。
此示例在不到一秒的时间内删除了 50000 行,其中列 I
的所有行等于 2
:
Sub DeleteMatchingRows()
Dim rgTable As Range, rgTags As Range, data(), tags(), count&, r&
' load the data in an array
Set rgTable = ActiveSheet.UsedRange
data = rgTable.Value
' tag all the rows to keep with the row number. Leave empty otherwise.
ReDim tags(1 To UBound(data), 1 To 1)
tags(1, 1) = 1 ' keep the header
For r = 2 To UBound(data)
If data(r, 9) <> 2 Then tags(r, 1) = r ' if column I <> 2 keep the row
Next
' insert the tags in the last column on the right
Set rgTags = rgTable.Columns(rgTable.Columns.count + 1)
rgTags.Value = tags
' sort the rows on the tags which will move the rows to delete at the end
Union(rgTable, rgTags).Sort key1:=rgTags, Orientation:=xlTopToBottom, Header:=xlYes
count = rgTags.End(xlDown).Row
' delete the tags on the right and the rows that weren't tagged
rgTags.EntireColumn.Delete
rgTable.Resize(UBound(data) - count + 1).Offset(count).EntireRow.Delete
End Sub
关于vba - 删除无法用 SpecialCells 抓取的行的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36873359/
我真的很困惑和好奇,为什么相同的编码,只是数据量不同,输出会完全不同? With Sheets("control deck").Range("A2:A5000").SpecialCells(xlCel
我构建了一个脚本来创建发送给不同人的电子邮件,其中包含单独的附件。我有从这个母脚本调用的不同子例程。 在调用子程序 Distribution 之前它一直有效。它停在 For Each cell In
基于 on another question在这个网站上,我开始想知道删除具有特定条件的所有行的最快方法。 上面提到的问题有各种解决方案: (1)循环遍历工作表上的所有行(向后),将所有满足条件的行一
这又是一个奇怪的事情。 我有这段代码,它使用过滤器从一张工作表中获取数据,并使用 Range.SpecialCells() 方法来查找要复制和粘贴的适当行。但是,如果我使用 Rows().Specia
我知道我可以通过迭代第一个范围来完成此任务,但我很好奇是否可以使用 SpecialCells 属性来完成此任务。 假设我有一列名称,中间有空单元格: A B C Jon Jim Sal
背景: 我已经申请过很多次AutoFilter从来没有真正问过自己为什么有时会这样。使用过滤数据的结果有时可能会令人困惑,特别是当 SpecialCells 发挥作用时。 让我详细说明以下场景: 测试
我目前正在尝试将过滤后的列复制到数组中以填充 Powerpoint 演示文稿中的 ComboBox。 我用来执行此操作的代码行是: ar = tbl.ListColumns(ColNumber).Ra
Excel SpecialCells(xlCellTypeBlank) 包括合并区域中的所有单元格,无论它们是否为空白。我认为这是一个错误,我迫切需要一个解决方法。复制步骤: (1) 创建一个工作表,
当使用Range.SpecialCells时如果范围不包含与条件匹配的单元格,则会抛出错误,指出未找到单元格。 此问题最常见的解决方案是让它发生并使用错误处理程序来处理它。 这是解决该问题的最有名的方
我在 Excel 2010 中有一个工作表,它被设置为伪表单(我没有创建它,我只是想修复它),因此格式设置表明用户只能在某些单元格中输入。根据某些功能,这些区域需要重置,即清除,但需要保留公式和标准/
使用 Selection.SpecialCells(xlCellTypeVisible).Count 时要计算单列过滤数据,它适用于多行结果。但是当只显示 1 行时,它会给我一个溢出错误或者我得到 c
当我选择一个包含三个单元格的范围时,例如 B3:B5,该方法按预期运行,并显示三个带有“3”、“4”和“5”的消息。 Sub visTest() Dim c As Range For
恐怕我误解了 VBA for excel 的文档,我有这行似乎是一个错误: Range a = Selection.SpecialCells(xlCellTypeConstants, 23) 但这一个
我正在尝试删除 B 列中包含空白的任何内容。 A1:A10 = {3,1,10,1,1,10,2,2,2,10}。当我运行我的代码时,我在删除行行出现错误。这是“运行时 1004 错误,未找到单元格”
Range.SpecialCells method可用于返回满足特定条件的 Range 对象。标准的类型是使用 xlCellType 常量指定的。 其中一个常量 (xlCellTypeBlanks)
我编写了一个宏,使用 Excel 范围对象的 SpecialCells 方法从某个范围中查找空白单元格。当我尝试执行以下代码时,出现“未找到单元格”的异常。 Sub test() Debug.Prin
我有一个 Excel VBA 宏,每周运行一次。我有一段代码可以过滤出不同的数据,然后将剩余的单元格复制到不同的工作表中 以下是受影响的代码部分: dim data as worksheet dim
我正在尝试自动化一份包含 5 个不同信息源的报告。我尝试使用 ListObjects 将不同表的 UNION 合并为一个表,除了复制第一个 ListObject 的第一列时,一切都工作正常。复制第一列
基于question由 @Chips Ahoy 提出,我决定创建一个 UDF 来查找某个范围内可见单元格的 PercentRank。 虽然 @Chips 似乎对我的语法修正感到满意,但实际上我无法让我
我有一段 Excel VBA 代码,如果工作表未 protected 则可以正常工作,但在 protected 时则不能。我已经阅读了之前的类似查询,但认为它们不适用于这种情况 - 建议的修复不适用或
我是一名优秀的程序员,十分优秀!