我们有一些非常大的 Excel 工作簿(数十个选项卡,每个选项卡超过 1 MB,非常复杂的计算),其中有数十个甚至数百个使用可怕的 INDIRECT 函数的公式。这些公式分布在整个工作簿中,并针对多个数据表来查找值。
现在,我需要将这些公式所针对的数据范围移动到同一工作簿中的不同位置。
(原因并不是特别相关,但其本身很有趣。我们需要在 Excel Calculation Services 中运行这些东西,并且一次加载每个相当大的表的延迟时间被证明高得令人无法接受。我们正在将表在一个连续的范围内,这样我们就可以一次加载它们。)
有什么方法可以找到当前引用我们要移动的表的所有间接公式吗?
我不需要在线执行此操作。只要是可靠的,我会很乐意接受需要 4 小时才能运行的东西。
请注意,.Precedent、.Dependent 等方法仅跟踪直接公式。
(另外,重写电子表格whatever对我们来说不是一个选择)。
Thanks!
您可以使用 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
此示例将每次出现的“indirect(D4)”替换为“indirect(C4)”。如果您有更复杂的间接函数,您可以轻松地将替换函数替换为更复杂的函数。即使对于更大的工作簿,性能也并没有那么糟糕。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)