Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一行VBA中替换多个字符_Vba_Replace - Fatal编程技术网

在一行VBA中替换多个字符

在一行VBA中替换多个字符,vba,replace,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 = Replac

我在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个单元格,而且当前运行需要很长时间。sad部分是,整个过程中,此替换在不同的场合运行。

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

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

您可以尝试使用正则表达式。我不能在一行上得到这个,但它应该比你当前的版本更快,而且行数更少。注意:您需要对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

这很有效,我只需要从VBA板添加功能。工具 引用并检查了Microsoft VBScript正则表达式1.0 Microsoft和VBScript正则表达式5。5@alex只需要两个引用中的一个,也可以使用后期绑定