用逗号替换点,并用点

时间:2019-09-06 15:17:44

标签: vba

我正在尝试将点替换为逗号并将逗号替换为数据中的点。但是,数据长度并不总是相同。因此,我为代码创建了一个按钮(表单控件)。

我尝试只为问题的第一部分编写代码;用逗号替换圆点。该代码适用于用逗号替换点。但是,我认为由于范围选择,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

2 个答案:

答案 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)

您将不得不创造三个机会。

  1. 将逗号更改为单元格中唯一的内容
  2. 将点更改为逗号
  3. 将该唯一字符更改为点:

您可以使用一行代码来执行此操作,其中最里面的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