在一行VBA中替换多个字符

时间:2017-02-10 10:58:52

标签: vba replace

我在VBA工作,并且有一个包含所有字母字母的单元格,我想要替换所有字母(没有任何内容,“”或数字,“0”),以及可能的标点符号。我目前运行它:

val = Replace(val, "(", "")
val = Replace(val, "]", "")
val = Replace(val, "A", "")
val = Replace(val, "B", "")
val = Replace(val, "C", "")
val = Replace(val, "D", "")
val = Replace(val, "E", "")
val = Replace(val, "F", "")
val = Replace(val, "G", "")
val = Replace(val, "H", "")
val = Replace(val, "I", "")
val = Replace(val, "J", "")
val = Replace(val, "K", "")
val = Replace(val, "L", "")
val = Replace(val, "M", "")
val = Replace(val, "N", "")
val = Replace(val, "O", "")
val = Replace(val, "P", "")
val = Replace(val, "Q", "")
val = Replace(val, "R", "")
val = Replace(val, "S", "")
val = Replace(val, "T", "")
val = Replace(val, "V", "")
val = Replace(val, "W", "")
val = Replace(val, "X", "")
val = Replace(val, "Y", "")
val = Replace(val, "Z", "")

我试过了:

val = Replace(val, "(", "")
val = Replace(val, "]", "")
val = Replace(val, "[A-TV-Z]", "")

我可以添加循环,但计算时间不会改变。

但它不起作用。有没有办法用一行替换25行代码,正如我所尝试的那样,因为我必须读取1M单元格,并且当前运行需要很长时间。可悲的是,这种替换在整个过程中分别进行。

2 个答案:

答案 0 :(得分:2)

使用正则表达式需要Regex.Replace()函数:

val = Replace(val, "(", "")
val = Replace(val, "]", "")
val = Regex.Replace(val, "[a-z]", "", RegexOptions.IgnoreCase)

答案 1 :(得分:1)

您可以尝试使用正则表达式。我不能在单行上获得它,但它应该比你当前的版本更快并且线路更少。请注意,您需要引用Microsoft VBScript正则表达式库。

Public Function Replacement(sInput) As String

Dim regex As New RegExp

With regex
   .Global = True
   .IgnoreCase = False
End With

regex.pattern = "[A-Z, a-z]"
Replacement = regex.Replace(sInput, "")


End Function