Excel VBA – 无法使用修剪和类似function删除单词之间的多余空格

我试图删除使用VBAstring中的不必要的空白,但修剪funciton似乎并没有为我工作。 在这个假设的例子中,我想删除“结束”和“时间”之间的额外空间。

Public Sub RemoveSpaces() Dim s As String: s = "START TIME: N/A END     TIME: N/A " s = Trim(s) Debug.Print s End Sub 

在这里输入图像说明

最简单的(也许是performance最好的)做法是用一个正则expression式:

 'Requires reference to Microsoft VBScript Regular expressions Private Function RemoveExtraSpace(inVal As String) As String With New RegExp .Pattern = "\s+" .Global = True RemoveExtraSpace = .Replace(inVal, " ") End With End Function Sub Example() Dim s As String s = "START TIME: N/A END TIME: N/A " Debug.Print RemoveExtraSpace(s) End Sub 

最新版本:

 Private Function RemoveExtraSpace(inVal As String) As String With CreateObject("VBScript.RegExp") .Pattern = "\s+" .Global = True RemoveExtraSpace = .Replace(inVal, " ") End With End Function 

编辑:如果每个评论你需要多行,只是添加额外的参数:

 With New RegExp .Pattern = "\s+" .Global = True .MultiLine = True RemoveExtraSpace = .Replace(inVal, " ") End With 

如果您想要换行符保留,请将模式更改为.Pattern = "[ ]+" (方括号以提高可读性)。

您可以使用split()在空格上分割,然后循环并跳过结果数组中的所有空项目:

 Public Sub RemoveSpaces() Dim s As String: s = "START TIME: N/A END TIME: N/A " Dim str() As String Dim str1 str = Split(s) s = "" For Each str1 In str If str1 <> "" Then s = s & str1 & " " End If Next str1 s = Trim(s) Debug.Print s End Sub 

也许app.Worksheetfunction.Trim?

 Public Sub RemoveSpaces() Dim s As String: s = "START TIME: N/A END TIME: N/A " s = Application.WorksheetFunction.Trim(s) Debug.Print s End Sub 

哦,我看到@Alexis Olson是第一个这样的人。

closures我的头顶部,我会使用splitfunction,然后将它们连接在一起。

 Dim s As String: s = "START TIME: N/A END TIME: N/A " sParts = Split(s, " ") s_wo_xtra_space = "" for i = lbound(sParts) to ubound(sParts) if sParts(i) <> "" then s_wo_xtra_space = s_wo_xtra_space & sParts(i) & " " end if next i s_wo_xtra_space = trim(s_wo_xtra_space) 

这假定你仍然需要单词之间的一个空格。

 do until instr(s, " ") = 0 s = replace(s, " ", " ") loop 

或者如果你想做一个UDF,你可以做这样的事情,然后删除双空格,你可以做s = RmvDblSpc(s)

 Function RmvDblSpc(What As String) As String Do Until InStr(What, " ") = 0 What = Replace(What, " ", " ") Loop RmvDblSpc = What End Function