嫑怂嘦怼>>干货>【汉字繁简转换】Excel/WPS表格VBA自定义函数

嫑 怂 嘦 怼
看见这几个字,有没有觉得眼睛懵懵的?



哈哈,原来是“纤炉厅郁”4个字的繁体啊!
看来汉字还真是很奇妙哦。如果你对汉字的繁体和简体转换感兴趣,可以用下面介绍的Excel VBA自定义函数轻松实现。
一、函数主体部分
函数需要用到系统的API函数,需要先进行引用,代码的主体部分如下:
Option Explicit#If Win64 ThenPrivate Declare PtrSafe Function LCMapString Lib "kernel32" Alias "LCMapStringA" (ByVal Locale As Long, ByVal dwMapFlags As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, ByVal lpDestStr As String, ByVal cchDest As Long) As LongPrivate Declare PtrSafe Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long#ElseIf Win32 ThenPrivate Declare Function LCMapString Lib "kernel32" Alias "LCMapStringA" (ByVal Locale As Long, ByVal dwMapFlags As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, ByVal lpDestStr As String, ByVal cchDest As Long) As LongPrivate Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long#End If' 汉字繁简转换函数'Convert between simplified and traditional charactersPublic Function CnConvert(ByVal str As String, Optional ByVal convertType As String = "t") As StringDim str_len As LongDim resultStr As StringDim mapFlag As LongIf str = "" Then Exit Function' 根据转换类型设置映射标志(忽略大小写)Select Case LCase(convertType)Case "t" ' 简体转繁体mapFlag = &H4000000Case "s" ' 繁体转简体mapFlag = &H2000000Case ElseErr.Raise vbObjectError + 1001, , "转换类型参数错误,仅支持't'(转繁体)或's'(转简体)"Exit FunctionEnd Select' 开始转换str_len = lstrlen(str)resultStr = Space(str_len)LCMapString &H804, mapFlag, str, str_len, resultStr, str_lenCnConvert = resultStr'转换结果End Function
在VBE中新建一个标准模块,把上述代码复制进去,就可以在工作表中开始使用了。
参数说明:
参数1: str – 待转换的字符串。
参数2: convertType – 转换类型,可选值:
选t(或T),忽略大小写,表示由简体转繁体(traditional,默认选项,可省略)。
选s(或S),忽略大小写,表示由繁体转简体(simplified)。
二、自定义函数描述
Sub RegisterFunctionDescription()' 注册CnConvert函数Application.MacroOptions _Macro:="CnConvert", _Description:="汉字繁简转换:" _& vbCrLf & "参数1:待转换的文字" _& vbCrLf & "参数2:t/T=转繁体(默认),s/S=转简体", _Category:="文本函数"End Sub
Sub UnregisterFunctionDescription()Application.MacroOptions Macro:="CnConvert", Description:=""End Sub






夜雨聆风