【问题标题】:Using Indirect within Advanced Filter在高级过滤器中使用间接
【发布时间】:2015-01-12 17:55:50
【问题描述】:

你好 Stack Overflow 社区,

我目前正在创建一个从给定文件夹导入两个或多个 CSV 文件的自动报告。我需要用于 VLOOKUP 的唯一标识符位于一个不起眼的列中,所以我需要做的是将找到的列剪切并插入到列“A”中。下面的例子。

With wksRawData
    '~~> Move Process ID Column to Column 'A' for VLOOKUP
    .Columns(WorksheetFunction.Match("pid", .Range("1:1"), 0)).Cut
    .Columns(1).Insert Shift:=xlToLeft

    '~~> Remove Additional Headers
    .Cells.RemoveDuplicates Columns:=Array(1)
End With

这部分效果很好,但我在另一个工作表中有一个公式应该引用$A2,它被更改为$B2。它应该引用$A2 的原因是因为它被用于高级过滤器公式,并且是第一个数据点。公式如下。

=IF(COUNTIF($C:$C, 'Raw Data'!$A2)=0, TRUE, FALSE)

当与其他高级过滤器列一起使用时,此公式会将任何手动添加的唯一标识符列入白名单。下面的例子。

PID Whitelist  |      |  user  |  proc          |  PID Whitelisted?
---------------+------+--------+----------------+------------------
          182  |      |  root  |                |  < FORMULA_ABOVE >
           11  |      |  test  |                |  < FORMULA_ABOVE >
         1776  |      |        |  Jazzy Rabbit  |  < FORMULA_ABOVE >

我尝试使用INDIRECT、ADDRESS 和INDEX 代替'Raw Data'!$A2,但由于它们引用绝对目的地,高级过滤器总是使用第一个唯一标识符值;而不是当前行的值。

提前感谢您的宝贵时间,非常感谢您提供的任何帮助!

  • 氮氧化物

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案1】:

    我建议在 VBA 列插入后立即重写公式。示例(使用改进的 (?) 公式:

    With wksRawData
        '~~> Move Process ID Column to Column 'A' for VLOOKUP
        .Columns(WorksheetFunction.Match("pid", .Range("1:1"), 0)).Cut
        .Columns(1).Insert Shift:=xlToLeft
    
        '~~> Remove Additional Headers
        .Cells.RemoveDuplicates Columns:=Array(1)
    End With
    sheets("Some_Sheet").cells(x, y).formula = "=NOT(COUNTIF($C:$C, 'raw data'!$A2))"
    

    【讨论】:

      【解决方案2】:
      'aslo one additional variant of the @Jeeped idea, without formulas
      
      With wksRawData
          .Columns(Range("1:1").Find("pid").Column).Cut
          .Columns(1).Insert
          .Cells.RemoveDuplicates Columns:=Array(1)
      End With
      Sheets("Some_Sheet").Cells(x, y).Value = _
      WorksheetFunction.CountIf(Columns(3), Sheets("raw data").Cells(2, 1).Value)
      

      【讨论】:

        猜你喜欢
        • 2015-10-22
        • 2020-02-12
        • 2014-05-24
        • 2012-08-10
        • 1970-01-01
        • 2019-08-02
        • 1970-01-01
        • 1970-01-01
        • 2016-08-16
        相关资源
        最近更新 更多