Range.Replace 无法使用范围公式查找和替换

Range.Replace not working on Range Formulas find and replace

我正在尝试将公式中的“=”更改为“'=”(主要是试图将公式保留为文本),但它不起作用。

Set rng = Range("A1:A500")

rng.Replace "=", "'=", xlPart

但由于某种原因它不起作用。

您需要 Replace() 函数,而不是 .Replace 方法:

Sub dural()
   Dim Rng As Range, r As Range
   Set Rng = Range("A1:A500").Cells.SpecialCells(xlCellTypeFormulas)

   For Each r In Rng
      r.Value = Replace(r.Formula, "=", "'=")
   Next r
End Sub

我测试了你的代码,它对我有用。如果你想尝试一个非常相似的 VBA 方法,你可以试试这个...

Sub test()
    For Each R In Range("A1:A5")
        R.Value2 = "'" & R.Formula
    Next
End Sub

此外,我不确定您尝试以文本形式查看公式的原因,但如果只是为了查看公式,您可以使用 "Formulas" 下的 "Show Formula" 选项选项卡

我做了一些性能测试,看看哪个更快...直接替换的 for 循环与原始 Range.Replace 方法。在 10 µs/cell 处,Range.Replace 轻松击败了大约 80 µs/cell 处的 for 循环,但是!,这并不是全部。 for 循环很慢,因为 VBA 在遍历单元格时很慢。从理论上讲,当涉及到实际操作时,直接替换应该总是优于替换算法。因此,我修改了 for 循环以改为作用于数组,它确实加快了大约 2 µs/cell。底线是,如果您有性能问题,这样的事情是最快的...

Sub test()
    Set R = Range("A1:A5000")
    Dim A() As Variant
    A = R.Formula
        For i = 1 To UBound(A)
             A(i, 1) = "'" & A(i, 1)
        Next
    R.Value2 = A
End Sub