VBA函数批量将将字符由全角转为半角,或由半角转为全角-同时适用Excel Access

2017-09-08 10:49:00
zstmtony
原创
685

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方式的字符,在没有汉字输入法起作用的时候输入的字母数字和字符都是半角的。
示例如下:(键盘的输入是一样的,输入法的设置不同)

在汉字输入法出现的时候,输入的字母数字默认为半角,但是标点则是默认为全角(如下图)可以通过鼠标点击输入法工具条上的相应按钮来改变,输入法名字左边的按钮是改变中文和英文输入的,右边的圆和半圆是改变字母和数字的全角半角的,再右边的“.,”或者"。,"是用来改变标点符号的中英文设置(中文标点即是全角,英文标点即是半角),最右边的键盘图标是显示软键盘用的,可以输入一些特殊字符或者其它语言里面的字母。

分享