2017-02-10 230 views
2

我在VBA工作,并与字母表中的所有字母的小区,我想,以取代所有的字母(什么也没有,“”,或数字“0”) ,以及可能的标点符号。我目前运行它:在一行替换多个字符VBA

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单元格读取,而且现在运行需要很长时间。可悲的是,这个替代品在整个不同的场合运行。

回答

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 
+0

这个工作,我只需要添加从VBA板功能。工具参考,并检查了Microsoft VBScript的正则表达式1.0 微软和VBScript正则表达式5.5 – alex

+0

@alex只需要两个引用中的一个,或者你可以使用后期绑定,而不是http://stackoverflow.com/questions/4556910/how -DO-I-获得正则表达式支持功能于Excel的通过-A-功能或定制功能 – Slai

2

Regex.Replace()功能需要使用正则表达式:

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