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