Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 替换VBA中字符的多个实例_Excel_Vba_Function_Replace_Excel Formula - Fatal编程技术网

Excel 替换VBA中字符的多个实例

Excel 替换VBA中字符的多个实例,excel,vba,function,replace,excel-formula,Excel,Vba,Function,Replace,Excel Formula,我有下面的公式,我想转换成VBA中的函数 =IFERROR(LEFT(B1,(FIND(",",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B1,"(",","),"-",","),"/",","))-1)),SUBSTITUTE(B1,".", "")) 我试过一些方法,但就是不能让它正常工作。 但是,这个简单的函数将在更少的行中完成这一切: Function Scrub(text) With Application Scrub = Left(text, .

我有下面的公式,我想转换成VBA中的函数

=IFERROR(LEFT(B1,(FIND(",",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B1,"(",","),"-",","),"/",","))-1)),SUBSTITUTE(B1,".", ""))
我试过一些方法,但就是不能让它正常工作。


但是,这个简单的函数将在更少的行中完成这一切:

Function Scrub(text)
With Application
    Scrub = Left(text, .Min(.Find(Array("(", ")", "-", "/", ","), text & "()-/,")) - 1)
End With
End Function

您也可以在VBA中使用正则表达式来实现这一点。 如果我理解正确,您希望用逗号替换字符串中
()/-
集合中的任何/所有字符

Option Explicit
Function CharacterSwap(S As String) As String
    Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
    .Pattern = "[()/-]"
    .Global = True
    CharacterSwap = .Replace(S, ",")
End With

End Function
如果您碰巧在上面的
.Pattern
中向character类添加了字符,您应该知道破折号
-
必须是类中列出的第一个或最后一个字符

如果它位于其他位置,则将被解释为指示由前面和后面的字符限定的字符范围

换句话说

  • [0-9]
    将包括所有数字
  • [-09]
    只包括
    破折号
    0
    9

此数组公式也可以执行您想要的操作:
=LEFT(B1,MIN(查找({“(“,”),“-”,“/”,“,”},B1&“()-/”))-1)
用Ctrl-shift键确认,而不是按Enter键确认。
Function Scrub(text)
With Application
    Scrub = Left(text, .Min(.Find(Array("(", ")", "-", "/", ","), text & "()-/,")) - 1)
End With
End Function
Option Explicit
Function CharacterSwap(S As String) As String
    Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
    .Pattern = "[()/-]"
    .Global = True
    CharacterSwap = .Replace(S, ",")
End With

End Function