Range.Replace无法处理范围公式查找和替换

时间:2015-09-24 15:59:04

标签: excel vba range

我试图将公式中的“=”更改为“'=”(基本上试图将公式保留为文本),但它不起作用。

Set rng = Range("A1:A500")

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

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

2 个答案:

答案 0 :(得分:2)

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

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

此外,我不确定您为什么尝试将公式视为文本的上下文,但如果只是查看公式,则可以使用“公式”选项卡下的“显示公式”选项。

我做了一些性能测试,看看哪个更快......直接替换的for循环与原始的Range.Replace方法相比。在10μs/单元时,Range.Replace很容易击败for循环,然后以大约80μs/单元的速度进行,然而!这并不是所有的说法。 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

答案 1 :(得分:1)

您需要替换()功能,而不是 .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