VBA函數批量將將字符由全角轉為半角,或由半角轉為全角-同時適用Excel Access

2017-09-08 10:49:00
zstmtony
原創
9852

VBA函數批量將將字符由全角轉為半角,或由半角轉為全角,及如何判斷一串字符里面含有全角的英文數字符號

Excel微信群中有網友有不少表格是全角,希望使用VBA批量轉換為半角。

嘗試用Access寫了一個,在Excel VBA里也通用。


'VBA將字符由全角轉為半角
'調用方法 gf_WideToNarrow("Excel交流網2016")
Public Function gf_WideToNarrow(strSrc As String) As String

    Dim strResult As String
    '通過StrConv及 vbNarrow參數轉換
    strResult = StrConv(strSrc, vbNarrow)
    gf_WideToNarrow = strResult

End Function
 


'VBA將字符由半角轉為全角
Public Function gf_NarrowToWide(strSrc As String) As String
    
    Dim strResult As String
    '通過StrConv及 vbWide參數轉換
    strResult = StrConv(strSrc, vbWide)
    gf_NarrowToWide = strResult

End Function


另判斷 字符串中是否含有全角符號的函數


'判斷字符串有否包含全角
'調用方法:gf_IncludeWideChar("Excel交流網2016")
Public Function gf_IncludeWideChar(strSrc As String) As Boolean

 gf_IncludeWideChar = (strSrc = StrConv(strSrc, vbNarrow))
 
End Function

'單個字符判斷,也可使用 AscB(Mid(字符串, i, 1)) = Asc(Mid(字符串, i, 1))



網絡上Rubi的專欄 還有另一種VBA 全角轉半角的方法 是使用逐個對應的方法,不夠靈活,但可以按自己的方式來定義



Option Explicit

Sub BatchReplace()
    Dim oDict, strKey
    
    Set oDict = CreateObject("Scripting.Dictionary")
    
    '全角數字轉換為半角
    oDict.Add "1", "1"
    oDict.Add "2", "2"
    oDict.Add "3", "3"
    oDict.Add "4", "4"
    oDict.Add "5", "5"
    oDict.Add "6", "6"
    oDict.Add "7", "7"
    oDict.Add "8", "8"
    oDict.Add "9", "9"
    oDict.Add "0", "0"
    '小寫全角轉換
    oDict.Add "a", "a"
    oDict.Add "b", "b"
    oDict.Add "c", "c"
    oDict.Add "d", "d"
    oDict.Add "e", "e"
    oDict.Add "f", "f"
    oDict.Add "g", "g"
    oDict.Add "h", "h"
    oDict.Add "i", "i"
    oDict.Add "j", "j"
    oDict.Add "k", "k"
    oDict.Add "l", "l"
    oDict.Add "m", "m"
    oDict.Add "n", "n"
    oDict.Add "o", "o"
    oDict.Add "p", "p"
    oDict.Add "q", "q"
    oDict.Add "r", "r"
    oDict.Add "s", "s"
    oDict.Add "t", "t"
    oDict.Add "u", "u"
    oDict.Add "v", "v"
    oDict.Add "w", "w"
    oDict.Add "x", "x"
    oDict.Add "y", "y"
    oDict.Add "z", "z"
  '大寫全角轉換
    oDict.Add "A", "A"
    oDict.Add "B", "B"
    oDict.Add "C", "C"
    oDict.Add "D", "D"
    oDict.Add "E", "E"
    oDict.Add "F", "F"
    oDict.Add "G", "G"
    oDict.Add "H", "H"
    oDict.Add "I", "I"
    oDict.Add "J", "J"
    oDict.Add "K", "K"
    oDict.Add "L", "L"
    oDict.Add "M", "M"
    oDict.Add "N", "N"
    oDict.Add "O", "O"
    oDict.Add "P", "P"
    oDict.Add "Q", "Q"
    oDict.Add "R", "R"
    oDict.Add "S", "S"
    oDict.Add "T", "T"
    oDict.Add "U", "U"
    oDict.Add "V", "V"
    oDict.Add "W", "W"
    oDict.Add "X", "X"
    oDict.Add "Y", "Y"
    oDict.Add "Z", "Z"
    '標點符號
    oDict.Add ",", ","
    oDict.Add ":", ":"
    oDict.Add ";", ";"
    oDict.Add "(", "("
    oDict.Add ")", ")"
    oDict.Add "[", "["
    oDict.Add "]", "]"
    oDict.Add ".", "."
    oDict.Add "+", "+"
    oDict.Add "%", "%"
    oDict.Add "/", "/"

    
    ' ......
    ' 在這里可以根據需要增加更多的替換規則
    ' ......
    
    For Each strKey In oDict.Keys
        Selection.Find.Execute FindText:=strKey, ReplaceWith:=oDict(strKey), Replace:=wdReplaceAll
        Selection.StartOf wdStory
    Next
    
    MsgBox "完成!"
End Sub


另Excel還可試下 =widechar(a1)
Unicode編碼判斷,全角標點/數字及英文字母范圍:FE30--FFE5


全角與半角的區別及相關知識


全角指一個字符占用兩個標準字符位置的狀態。漢字字符和規定了全角的英文字符及國標GB2312-80中的圖形符號和特殊字符都是全角字符。
一般的系統命令是不用全角字符的,只是在作文字處理時才會使用全角字符。

全角是一種電腦字符,且每個全角字符占用兩個標準字符(或半角字符)位置。
每個普通字符(或半角字符)只占用一字節的空間(一字節有8位,共256個編碼空間),而漢語、日語、及朝鮮文等文字語言的字庫量遠大于256個,所以改用兩個字節來儲存。同時,也是因為中日韓等文字的書寫習慣,如果統一使用全角字符的話,排列起來也顯得整齊。
為了排列整齊,英文和其它拉丁文的字符和標點也提供了全角格式。
通常的英文字母、數字鍵、符號鍵都是半角的,半角的顯示內碼都是一個字節。在系統內部,以上三種字符是作為基本代碼處理的,所以用戶輸入命令和參數時一般都使用半角。
全角與半角有什么區別?各在什么情況下使用?
全角占兩個字節,半角占一個字節。
半角全角主要是針對標點符號來說的,全角標點占兩個字節,半角占一個字節,而不管是半角還是全角,漢字都還是要占兩個字節。
在不支持漢字等語言的計算機上只能使用半角標點(其實這種情況根本就不存在半角全角的概念) 。
,.?\'! ……這些是半角的
,。?‘! ……這些是全角的
對于大多數字體來說,全角看起來比半角大,當然這不是本質區別。

在中文輸入法中,切換全角和半角格式的快捷鍵為SHIFT+空格。
全角和半角區別
全角就是字母和數字等與漢字占等寬位置的字。
半角就是ASCII方式的字符,在沒有漢字輸入法起作用的時候輸入的字母數字和字符都是半角的。
示例如下:(鍵盤的輸入是一樣的,輸入法的設置不同)

在漢字輸入法出現的時候,輸入的字母數字默認為半角,但是標點則是默認為全角(如下圖)可以通過鼠標點擊輸入法工具條上的相應按鈕來改變,輸入法名字左邊的按鈕是改變中文和英文輸入的,右邊的圓和半圓是改變字母和數字的全角半角的,再右邊的“.,”或者"。,"是用來改變標點符號的中英文設置(中文標點即是全角,英文標點即是半角),最右邊的鍵盤圖標是顯示軟鍵盤用的,可以輸入一些特殊字符或者其它語言里面的字母。

分享
北京十一选五基本走势