我已经构建了这个宏,但我希望有一个更快的版本或一个能在更短的时间内做同样事情的公式。
是)我有的:
For Each cell In Range("Table_Query_1[[#Data],[Reason2]]")
For Each PossibleValue In Range("F2", Range("F2").End(xlDown))
If Len(cell) = 0 Then
If (InStr(UCase(cell.Offset(0, 1)), UCase(PossibleValue)) <> 0) Then
cell.Value = PossibleValue.Value
End If
Else
Exit For
End If
Next
If Len(cell) = 0 Then
cell.Value = cell.Offset(0, -1)
End If
Next
我可以使用以下数组公式获得任何东西的唯一另一种方法
=IF(ISNA(MATCH($F$3:$F$10,[@Extra Info],0)),[@Reason],$F$3:$F$10)
但这对于第 4 行和第 9 行的部分匹配不起作用。我也怀疑这个数组公式会比 vba 宏快得多,而且它还需要更多的测试维护在这种情况下,值范围(F2:f3),因为我必须不断更新该公式,否则我必须使原始范围像 F2:F100 女巫会导致它花费更长的时间。
所以,我想要的是,如果我的值范围内的任何值(在这种情况下为 F2:F3),是否在当前行的额外信息列中找到,然后是该行的原因 2(偏移(0,-1 )) 等于匹配的值。但如果没有找到,那么只需使用该行中的原因(偏移量(0,1))。
第二个问题是我需要在 QueryTable 刷新后运行宏,但是如果我将其设置为单元格上的单元格更改事件,则查询中将发生更改,宏在导入最终查询表之前运行并完成,并且排序。