首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在VBA中从自动筛选器中删除多行的性能

在VBA中从自动筛选器中删除多行的性能
EN

Stack Overflow用户
提问于 2015-05-28 16:17:47
回答 2查看 168关注 0票数 0

我想知道是否有比我正在使用的代码更快的方法来完成这个任务。我从录音机中得到了使用xlUp的代码。

代码语言:javascript
运行
复制
 rCnt = Cells(Rows.Count, "B").End(xlUp).Row
 ActiveSheet.Range("$B$1:$J" & rCnt).AutoFilter Field:=5, _
      Criteria1:=Application.Transpose(arrCodes), Operator:=xlFilterValues
 Rows("2:" & rCnt).Delete Shift:=xlUp

实际上,如果有什么方法可以翻转过滤器,我根本不需要删除,因为这是我复制的临时表。然而,我所有的研究都没有找到方法。

代码语言:javascript
运行
复制
Criteria1:=Application.Transpose(<>arrCodes)

arrCodes有太多的元素要在过滤器中列出。而且arrCodes中没有的东西太多了,无法用它来制作数组。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-28 19:08:32

如果您只想使用Excel而不使用公式或VBA,可以执行以下简单步骤来获得“反向”筛选器。如果需要,可以将其移植到VBA:

  • 在相反的条件下应用过滤器
  • 将这些单元格颜色放在一列(字体或背景)中。
  • 清除过滤器
  • 再次过滤,但这一次是由没有颜色的列中的单元格进行的。
  • 把那些结果复制到你想要的地方

如果列已经有一些背景色,这将不能很好地工作。如果是这样的话,您可以添加一个新的列并给它加上颜色。如果这是在VBA中,您可以自动化这些步骤。这是有限度的,但如果适用的话,这是快速而简单的。

票数 0
EN

Stack Overflow用户

发布于 2015-05-28 16:42:06

我曾经成功地建造了然后删除了一个范围。您可以将范围与Union()合并。我附加了一些示例代码,它不是很好,但它展示了基本的概念。此示例删除第2行至第11行A列中带有奇数的行。

代码语言:javascript
运行
复制
Public Sub DeleteRows()
  Dim deleteThis As Range

  For i = 2 To 11
    If Sheet1.Cells(i, 1).Value Mod 2 = 1 Then
      If deleteThis Is Nothing Then
        Set deleteThis = Sheet1.Rows(i)
      Else
        Set deleteThis = Union(deleteThis, Sheet1.Rows(i))
      End If
    End If
  Next i

  deleteThis.Delete xlShiftUp
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30512007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档