2013-09-27 34 views
1

我在中編寫代碼以取出一個字符串並刪除所有出現的單個空格,同時保留連續的空格。如何從字符串VBA中刪除單個空格(不刪除連續空格)

這就是我現在所擁有的,但它只是刪除所有空間並用短劃線替換它們。

感謝您的任何幫助或指導!

Sub Main 
    'Nothing happens when the code executes the following string 
    CombineText("Job   Hours  Pay Labor %") 

    'When the following executes it should look like this 
    'Major-Group-Total  382  2,085.25 
    CombineText("Major Group Total  382  2,085.25") 
End Sub 

Sub CombineText(searchString As String) 
    a = Len(searchString) 

    For n = 1 To a  
     If Mid(searchString, n, 1) = Chr(32) Then 
      searchString = Application.Substitute(searchString, Mid(searchString, n, 1), "-") 
     End If 
    Next n 
End Sub 
+0

檢查當前的字符是一個空格。如果是,請檢查右側和左側的角色。如果這兩者都不是空格,則用 - 替換它,如果是空格,則不執行任何操作。 – nhgrif

回答

4
Function CombineText(sSearch As String) As String 

    Dim i As Long 
    Dim sReturn As String 

    sReturn = sSearch 

    For i = 2 To Len(sReturn) - 1 
     If Mid$(sSearch, i, 1) = Space(1) And Mid$(sSearch, i - 1, 1) <> Space(1) And Mid$(sSearch, i + 1, 1) <> Space(1) Then 
      Mid$(sReturn, i, 1) = "-" 
     End If 
    Next i 

    CombineText = sReturn 

End Function 

?combinetext("Major Group Total  382  2,085.25") 
Major-Group-Total  382  2,085.25 
?combinetext("Job   Hours  Pay Labor %") 
Job   Hours  Pay Labor-% 
+0

這就是我正在尋找的答案!我對@nhgrif所做的評論非常接近,但我對所有VBA語法都很不熟悉,而且你打敗了我。做得好 –

+0

我沒有意識到MID()不僅僅是一個函數。 –

+0

+1,用於在LHS上有效使用'Mid $'。 – brettdj

1

你也可以使用一個RegExp通過人物爲此在單杆,而不是循環

Function CleanStr(strIn As String) As String 
Dim objRegex As Object 
Set objRegex = CreateObject("vbscript.regexp") 
With objRegex 
.Pattern = "(\S)\s(?=\S)" 
.Global = True 
CleanStr = .Replace(strIn, "$1-") 
End With 
End Function 

Sub Test() 
Debug.Print CleanStr("Job   Hours  Pay Labor %") 
Debug.Print CleanStr("Major Group Total  382  2,085.25") 
End Sub