我们有一些非常大的Excel工作簿(几十个选项卡,每个MB,非常复杂的计算),有许多,可能有数百个使用可怕的INDIRECT函数的公式.这些公式分布在整个工作簿中,并针对几个数据表来查找值.
现在,我需要将这些公式所针对的数据范围移动到同一工作簿中的不同位置.
(原因是不是特别相关,但对自己有意思.我们需要运行Excel计算服务这些事情,延迟打装载每个相当大表之一的证明是不可接受的时间的.我们正在移动表格在一个连续的范围内,所以我们可以一次性加载它们.)
有没有办法找到目前引用我们想要移动的表的所有INDIRECT公式?
我不需要在线执行此操作.只要它可靠,我会高兴地拿走需要4个小时的东西.
请注意..Precedent,.Dependent等方法仅跟踪直接公式.
(另外,在重写电子表格无论是不是我们的选择).
谢谢!
您可以使用vba迭代整个工作簿(我已经包含了来自@PabloG和@ euro-micelli的代码):
Sub iterateOverWorkbook() For Each i In ThisWorkbook.Worksheets Set rRng = i.UsedRange For Each j In rRng If (Not IsEmpty(j)) Then If (j.HasFormula) Then If InStr(oCell.Formula, "INDIRECT") Then j.Value = Replace(j.Formula, "INDIRECT(D4)", "INDIRECT(C4)") End If End If End If Next j Next i End Sub
这个例子用"间接(C4)"代替每次出现的"间接(D4)".如果您有更复杂的间接功能,您可以轻松地将替换功能与更复杂的功能交换.性能并不差,即使对于更大的工作簿也是如此.