2016-05-04 185 views
1

如何刪除不屬於VBA中ASCII類別的所有特殊字符?Excel VBA刪除字符串中的Unicode字符

這些是出現在我的字符串中的一些符號,需要刪除。 還有更多這樣的字符。

這不屬於ASCII類別,你可以看到這個http://www.ascii.cl/htmlcodes.htm

我想是這樣的

strName = Replace(strName, ChrW(376), " ") 

,但沒有奏效。

請幫我解決這個問題。

感謝 傑文

+0

術語:如你所知,Unicode是ASCII的一個超集。但是,ASCII字符在所謂的「塊」而不是[Unicode類別]中(http://www.fileformat.info/info/unicode/category/index.htm);特別是[C0控制和基本拉丁語](http://unicode.org/charts/nameslist/)塊。 –

回答

4

會一個RegEx解決方案感興趣的你試試?

在這個網站上有很多不同語言的例子 - 這裏有一個C#的例子:How can you strip non-ASCII characters from a string? (in C#)

嘗試此VBA:

Private Function GetStrippedText(txt As String) As String 
    Dim regEx As Object 

    Set regEx = CreateObject("vbscript.regexp") 
    regEx.Pattern = "[^\u0000-\u007F]" 
    GetStrippedText = regEx.Replace(txt, "") 

End Function 
+1

嘿非常感謝,它的工作原理。不確定所有條件和所有特殊的Unicode字符,但現在它運行良好。這隻需要很多時間來處理。 – Jeevan

+1

如果你正在轉換很多字符串,例如在一個循環中,那麼嘗試定義一次模式,然後在循環中調用'.Replace'函數。這可能有助於提高速度。 – Ambie

+0

謝謝:)這並沒有減少很多時間,但無論如何它有助於減少一點時間。 – Jeevan

0

嘗試application.clean()

它會刪除所有不可打印的字符

+0

你能給我舉個例子嗎。我無法在vba中的自動文本代碼中找到任何application.clean()。 – Jeevan

+0

請看看這個http://pasteboard.co/FtkoMrB.png 我也試過「strName = Clean(strName)」,他們沒有工作。 – Jeevan

+0

試用Application.WorksheetFunction.Clean(「üäöaŠs」)。但它不會幫助你,它只適用於不可打印的字符。你的是可打印的。 – Vityata

0

當你寫在即時窗口下面您能得到什麼?

?Replace("ŸŸŸŸ", ChrW(376), "ale") 

我得到: alealealeale

+0

是的它爲我打印相同。我有Ÿ作爲特殊字符,但是當作爲字符串傳遞給Replace方法時,strName = Replace(strName,ChrW(376),「」),其中strName最初是ŸLPAIF變爲?LPAIF。這個字符串然後進入寫入文件方法,在那裏代碼崩潰說「運行時錯誤」5'無效的過程調用或參數「。我覺得 ?新制作的也不是一個普通的問號,而是一些特殊的字符。我想在我的動態字符串中替換它,而不是以您顯示的「ŸŸŸŸ」的形式進行替換。 – Jeevan

+0

嗨,我認爲它在Debug.Print中工作,但是當使用來自Ÿ的單元格的實際值時,它不會這樣做。 – Jeevan

0

假如您有:

enter image description here

然後將下面的代碼將得到A1String僅透過ANSI(代碼0到255)讓在A2

Sub test() 
Dim s1 As String, s2 As String, c As String, i As Long, iAsc As Integer 

s1 = Range("A1").Value 

s2 = "" 

For i = 1 To Len(s1) 
    c = Mid(s1, i, 1) 
    iAsc = AscW(c) 
    If iAsc <= 255 Then 
    s2 = s2 & c 
    End If 
Next 

Range("A2").Value = s2 

End Sub 
+0

嗨,我試過這段代碼,它用?代替了?在輸出中。這仍然不能解決問題。 – Jeevan

+0

我認爲閱讀本身時Ÿ被讀爲?通過excel。 Ÿ無論如何在excel表格中是不可見的。 – Jeevan

+0

正如你在我的照片中看到的那樣,「這是我的一個測試。」Blubb。「是我的工作表的實際內容。有了這個我的代碼完全按照我所描述的那樣工作。你在哪看到「Ÿ」,然後在表單中看不到**? –

0

下面

Function ClearUnwantedString(fulltext As String) As String 
    Dim output As String 
    Dim character As String 
    For i = 1 To Len(fulltext) 
     character = Mid(fulltext, i, 1) 
     If (character >= "a" And character <= "z") Or (character >= "0" And character <= "9") Or (character >= "A" And character <= "Z") Then 
      output = output & character 
     End If 
    Next 
    ClearUnwantedString = output 
End Function 

Sub test() 
    a = ClearUnwantedString("dfjŒœŠdskl") 
End Sub 
+0

我正在使用類似的東西,但我的代碼的moto不是這個。它應該允許ASCII字符的特殊字符,但只能刪除不屬於ASCII代碼0到255的特殊字符。 – Jeevan

+0

請給我看看你的字符串嗎? –

+0

我的字符串在Excel工作表中看起來像LPAIF,但前面隱藏了一個Ÿ字符,它在Excel中不可見,但它存在,所以字符串是ŸLPAIF。當我將「LPAIF」作爲一個靜態字符串時,上面給出的一些解決方案起作用,而不是直接從Excel中讀取時才起作用。無論如何,我們現在有一個解決方案,謝謝你的幫助。 – Jeevan