我希望 Excel 在使用 VBA 进行查找和替换时,停止用等效的科学记数法替换包含 E 的完美字符串。
我尝试通过使用ReplaceFormat.NumberFormat = "@"来强制它无济于事。
这是说明我的问题的代码:
Sub testsub()
ActiveSheet.Columns("A:A").NumberFormat = "@"
fnd = "2"
rplc = "39456E10"
Range("A1").Value = fnd
Range("A2").Value = rplc
Application.ReplaceFormat.NumberFormat = "@"
ActiveSheet.Cells.Replace what:=fnd, Replacement:=rplc, _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=True
End Sub
Run Code Online (Sandbox Code Playgroud)
这就是结果
好吧,这取决于你的物体中有多少细胞Range。您可以选择一种Application.Substitute方法。
我认为只要您使用显式返回String数据类型的方法/函数,就可以了。既然Substitute确实如此,您可以尝试如下所示:
Sub Test\n Range("A1:A2").Value = Application.Substitute(Range("A1:A2"), "2", "39456E10")\nEnd Sub\nRun Code Online (Sandbox Code Playgroud)\n\n假设您的格式Range已经格式化为"@". 如果没有,您可能希望将其包含在代码中。这也适用于更大规模的二维阵列,例如:A1:Z1000。
例如:
\n\n\n\n我认为这同样适用于示例RegEx.Replace方法和Replace函数(不要与方法混淆Replace)。而不是上面的需要迭代。
这是一个有趣的事实,Application.Substitute我们还可以知道VBA我们想要替换哪个搜索值出现。例如,仅替换第二次出现的数字2:
Range("A1:A4") = Application.Substitute(Range("A1:A4"), "2", "39456E10", 2)\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n然而,根据 @P\xe1\xb4\x87\xca\x9c 他的回答,撇号的存在是有原因的...... =)。因此,这将是我个人的偏好(并且应该更快)。
\n