我正在尝试将点替换为逗号并将逗号替换为数据中的点。但是,数据长度并不总是相同。因此,我为代码创建了一个按钮(表单控件)。
我尝试只为问题的第一部分编写代码;用逗号替换圆点。该代码适用于用逗号替换点。但是,我认为由于范围选择,Excel被卡住了。有人可以帮我添加用点替换逗号的部分吗?
Sub ReplacePointWithComma()
Dim Cell As Range
ActiveSheet.Range("D:I").Select
For Each Cell In Selection
Cell.Value = Replace(Cell.Value, ",", ".")
Next
End Sub
答案 0 :(得分:5)
Replace
就像您正在使用的一样,是VBA的VBA.Strings.Replace
函数。那行得通,但是正如您所看到的,当迭代600万个单个单元时,需要一段时间。
考虑使用Range.Replace
代替as Scott showed in a comment above-这样,您就不需要迭代任何东西;这应该快得多:
With ActiveSheet.Range("D:I")
.Replace ",", "|" ' need a temp placeholder character, otherwise we'd end up with only commas!
.Replace ".", ","
.Replace "|", "."
End With
答案 1 :(得分:0)
您将不得不创造三个机会。
您可以使用一行代码来执行此操作,其中最里面的Replace
是步骤1
,第二最里面的是步骤2
,然后外面的Replace
是步骤3
。
Sub ReplacePointWithComma()
Dim Cell As Range
ActiveSheet.Range("D:I").Select
For Each Cell In Selection
Cell.Value = Replace(Replace(Replace(Cell.Value, ",", "|"), ".", ","), "|", ".")
Next
End Sub
这里的另一个建议是不要使用.Select
或.Activate
。人类可以选择并激活细胞和细胞,但是VBA并不需要。只需告诉它要对哪些单元格进行操作即可:
Sub ReplacePointWithComma()
Dim Cell As Range
For Each Cell In ActiveSheet.Range("D:I").Cells
Cell.Value = Replace(Replace(Replace(Cell.Value, ",", "|"), ".", ","), "|", ".")
Next
End Sub
最后,请注意,这将遍历D列至I列中的每个单元。这将是600万次迭代。 Excel正在这样做,但是它将永远长久。而是给它一个合理的范围来迭代:
Sub ReplacePointWithComma()
Dim Cell As Range
For Each Cell In ActiveSheet.Range("D1:I10000").Cells
Cell.Value = Replace(Replace(Replace(Cell.Value, ",", "|"), ".", ","), "|", ".")
Next
End Sub