通过仅更改公式中的特定数据来批量替换单元格

Mass replace cells with changing only specific data from their formula

我有一个 sheet 单元格包含这样的公式:

=IF(LEN('API Tool'!P358),IF('API Tool'!P358/POWER(10,18)>=C3+(C3*25/100),"API ERROR",'API Tool'!P358/POWER(10,18)),)

我想批量替换它们并像这样向 C 单元格引用添加间接函数(检查粗体字母):

=IF(LEN('API Tool'!P358),IF('API Tool'!P358/POWER(10,18)>=INDIRECT("$C3")+(INDIRECT("$C3") *25/100),"API ERROR",'API Tool'!P159/POWER(10,18)),)

有没有我可以使用的脚本或正则表达式来批量替换所有内容?

谢谢

首先,在 INDIRECT 中使用“$”符号是多余的,在这种情况下,也只会使事情复杂化。 everyevery 部分的 INDIRECT 引用本质上是锁定引用。

就是说,如果您要进行的更改仅在特定范围内,select 首先是该范围。如果它们在整个 sheet 或整个分布sheet 中,请转到下一步。

点击Ctrl-H(或Cmd-H或编辑>查找和替换)打开“查找和替换”对话框。

在“查找”字段中,输入:

([^A-Z])(C\d+)

在“替换为”字段中,输入:

INDIRECT("")

确保将“搜索”位置设置为与所需范围相匹配。 (如果您 select 编辑了一个特定范围,然后在此处选择“特定范围”,您当前 select 编辑的范围将被填充。)

选中“使用正则表达式搜索”和“也在公式中搜索”复选框。这也会自动 select “匹配大小写”(因为正则表达式是 case-sensitive)。

单击“全部替换”按钮。

REGEX 必须包含(并避免)列可能偶然包含 C 的情况,例如对列 AC 的引用,这就是为什么它有两个部分:一个确保前面的字符C 不是另一个有效的列字母,而是抓住有问题的直接部分的字母。

此外,虽然这不是您所问内容的一部分,但我提醒您仔细考虑一下为什么要将这些直接引用替换为间接引用。很难想象有必要这样做的情况。一旦你将它们更改为 INDIRECT,如果你在任何地方添加或删除列或行,这些引用将不会根据这些更改进行调整——这意味着这些引用中的每一个随后都会指向错误的位置。