2015-01-11 29 views
0

您好堆栈溢出社区,在高级筛选器中使用间接

我目前正在创建一个自动报告,从给定文件夹导入两个或多个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> 

我已经尝试在'Raw Data'!$A2的地方使用INDIRECTADDRESSINDEX,但由于他们绝对参考目的地高级筛选总是使用第一个唯一标识符值;而不是当前行的值。

预先感谢您的时间,我非常感谢您提供的任何帮助!

  • NOX

回答

0

我建议干脆的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))" 
0
'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)