我正在将CSV文件中的值导入Excel文件的工作簿中。然后我使用VBA对这些值进行筛选和排序。让我们将此工作表称为“raw_values”。然后在另一个工作表(“processed_values”)中读取和处理这些值。
接下来,我想清除“processed_values”上的所有单元格,并将一行公式从工作表“设置”复制到“processed_values”上的表中的所有行。然而,由于此工作表上公式中的引用引用了“raw_values”-工作表,因此这些引用会因之前的排序和筛选而更改。例如,在“raw_values”中,前10行由于过滤而被删除,第11行到第20行由于排序而被放置在底部。“processed_values”中的引用被破坏或指向错误的行。
如何将错误的引用更正为正确的行?我想到了这个方法,但是使用通配符不起作用:
Selection.Replace What:="raw_values!" & "(*)??", Replacement:="raw_values!" & "(*)36", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
与此我想以下:
raw_values!*?? -> raw_values!*36
Where * = the column and ? = the row
结果:
Import!D21 -> Import!D36
Import!G22 -> Import!G36
Import!H21 -> Import!H36
Import!J19 -> Import!J36
我希望我想达到的目标是比较明确的,并且你可以帮助我。提前感谢!
1条答案
按热度按时间uqjltbpv1#
不确定我是否理解您的问题,但如果您希望工作表“processed_values”中的单元格A1引用“Import”中的单元格A1,您可以使用间接和地址公式,例如
=INDIRECT("Import!"&ADDRESS(ROW(),COLUMN()))
,这样就不需要搜索和替换特定引用。如果需要,您可以通过加或减来偏移,例如,将=INDIRECT("Import!"&ADDRESS(ROW()+2,COLUMN()-1))
放入单元格B1将引用“导入”的单元格A3。因此,对于范围A1:Z100,VBA代码应为
Range("A1:Z100").Formula2R1C1 = "=INDIRECT("Import!"&ADDRESS(ROW(),COLUMN()))