【问题标题】:Excel VBA store countifs output for further operationExcel VBA 存储计数输出以供进一步操作
【发布时间】:2011-07-16 10:44:49
【问题描述】:

我正在用 VBA 为 excel 编写应用程序。使用一些条件并通过以下功能计算记录数,效果很好。

   cnt = appExcel.Application.CountIfs(R1, AuditType, R2, "Fail", UserRange1, UserName & "*")

这里的 R1、R2 和 UserRange1 是描述单个单元格的 Range 类型。 如果我们打印

R1.Address  '$E:$E
R2.Address ' $M:$M so on.

我正在“cnt”变量中获取符合这些条件的行数。

我需要进一步操作,例如从上述单元格范围中搜索一些自定义单元格。为此,我需要将这些地址存储在“范围”对象中。 请指导我如何将这些过滤的记录存储在一个范围内。我也不想复制到其他区域。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    通过在 VBA 中声明一个 Name 对象,然后将它的 RefersTo 值设置为地址,您可以向工作表添加一个新范围。此示例添加了执行此操作所需的声明和代码。它假定您对 R1 范围内包含常量的单元格感兴趣:

    Dim rngFiltered As Excel.Range
    Dim nmNew As Excel.Name
    
    '...
    
    Set rngFiltered = R1.SpecialCells(xlCellTypeVisible)
    Set nmNew = ws.Names.Add(Name:="NewRange", RefersTo:="=" & rngFiltered.Address)
    

    【讨论】:

    • 谢谢,但我认为不能只为过滤后的内容创建命名范围。他们将所有行从开始到结束。
    • 如果您应用了自动过滤器,您可以指定 xlCellTypeVisible。我更改了上面的代码来做到这一点。那是你要的吗?我不确定您的“自定义单元格”是如何过滤的。
    • 谢谢,我得到了一些自动过滤器的示例代码,可以在上面添加您的解决方案以获得我的结果。 .Range("A1:D1").AutoFilter .Range("A1:D1").AutoFilter Field:=2, Criteria1:=35
    【解决方案2】:

    如果我理解您的意思,请插入一个命名范围来定义引用的范围。

    Excel 2003 插入>名称>定义

    Excel 2010 公式>定义名称

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 2023-01-11
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多