Hello 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
,但由于它们引用绝对目标,因此高级过滤器始终使用第一个唯一标识符值;而不是当前行的值。
提前感谢您的时间,我非常感谢您提供的任何帮助!
答案 0 :(得分: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))"
答案 1 :(得分: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)