2013-12-23 430 views
2

在excel單元格中有文本「abcd 24 ef-gh」。VBA排除特殊字符和數字,但保留字符串的空格

我需要擺脫「24」和「 - 」,但保留所有字母和空格。

我有一個循環遍歷文本並使用類似運算符標識字母的函數。出於某種原因,它不排除「24」,也不是「 - 」爲我添加的循環前更換聲明:

Function StripNonAlpha(TextToReplace As String) As String 
Dim i As Integer 
Dim a, b, c As String 
a = Replace(TextToReplace, "-", " ") 
For i = 1 To Len(a) 
    b = Mid(a, i, 1) 
    If b Like "[A-Z,a-z, ]" Then 
     c = c & b 
    End If 
Next i 
StripNonAlpha = c 

End Function 

我也喜歡,而不是使用這個循環正則表達式,但我沒有找到用於VBA的正則表達式,當我找到很多其他語言的例子。

任何正則表達式的建議是受歡迎的,但我也想知道爲什麼我的循環不像預期的那樣。

+0

哪個Excel版本(適用於Excel 2007)? – pnuts

+1

我使用Excel 2007 ;-) – CloseISQ

回答

5

使用一個簡單的這樣,讓您所需的字符(即刪除任何不a-zA-Z或空格)

更新:由具有" "更換-正則表達式之前編輯剝離

Function StripNonAlpha(TextToReplace As String) As String 
Dim ObjRegex As Object 
Set ObjRegex = CreateObject("vbscript.regexp") 
With ObjRegex 
.Global = True 
.Pattern = "[^a-zA-Z\s]+" 
StripNonAlpha = .Replace(Replace(TextToReplace, "-", Chr(32)), vbNullString) 
End With 
End Function 
+1

@pnuts是的。我讀了文本中的'remove' - ''部分,但是您的代碼將'-'保存爲''「''是正確的。相應更新 – brettdj

+1

複製,粘貼,運行,它完成這項工作!只需要用單個空格替換雙精度空格作爲結果轉換:StripNonAlpha = Replace(.Replace(TextToReplace,vbNullString),「」,「」) – CloseISQ

+0

@Brettdj對不起。也許OP *希望*將它們剝離(例如,在編輯之前接受了A) - 我很難分辨,因爲我認爲OP的代碼已經完成了所需的代碼。 – pnuts

1

您將需要添加到正則表達式庫的引用看到this

嘗試這種模式

regEx.Pattern = "(\w\w\w\w)\s\d\d\s(\w\w)\D(\w\w)" 

這會給你三個分組ABCD EF GH,你可以再與工作。希望這可以幫助!

+0

您不需要添加引用,因爲您可以延遲綁定(請參見下文)。此外,OP還希望刪除不匹配的內容,而不是像您所回答的那樣匹配特定的字符串。 – brettdj

+0

我給了參考鏈接的投票,但我同意Brettdj,我想刪除而不是匹配。 – CloseISQ

相關問題