在高级过滤器中使用间接
Using Indirect within Advanced Filter
你好 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 列插入后立即重写公式。示例(使用改进的 (?) 公式:
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))"
'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)
你好 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 列插入后立即重写公式。示例(使用改进的 (?) 公式:
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))"
'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)