乐于分享
好东西不私藏

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

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

嫑 怂 嘦 

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

似乎每个字都认识,又似乎每个字都不认识,有没有?
其实,这是一种合义会意字(又称“正义会意字”),是传统“六书”中会意字的一个特殊子类,它们不同于通过象形部件组合表意的“以形会意”,而是由2个独立文字直接拼接,字义就是部件意义直接相加。
在如今的网络环境下,这种字被叫做“拼字”“合体梗字”。特点是:把2个常用字合起来,组成一个新的生僻字,不认识这个新字也没关系,因为它的意义就是那2个常用字的连续语义。
比如上面的:
嫑怂嘦怼
可以读作:
不要怂,只要怼!
也可以读作:
不要从心,只要对心!

但是,下面这个呢:
纖 爐 廳 鬱

哈哈,原来是“纤炉厅郁”4个字的繁体啊!看来汉字还真是很奇妙哦。如果你对汉字的繁体和简体转换感兴趣,可以用下面介绍的Excel VBA自定义函数轻松实现。

一、函数主体部分

函数需要用到系统的API函数,需要先进行引用,代码的主体部分如下:

Option Explicit#If Win64 Then    Private 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 Long    Private Declare PtrSafe Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long#ElseIf Win32 Then    Private 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 Long    Private 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 Long    If str = "" Then Exit Function    ' 根据转换类型设置映射标志(忽略大小写)    Select Case LCase(convertType)        Case "t" ' 简体转繁体            mapFlag = &H4000000        Case "s" ' 繁体转简体            mapFlag = &H2000000        Case Else            Err.Raise vbObjectError + 1001, , "转换类型参数错误,仅支持't'(转繁体)或's'(转简体)"            Exit Function    End Select    ' 开始转换    str_len = lstrlen(str)    resultStr = Space(str_len)    LCMapString &H804, mapFlag, str, str_len, resultStr, str_len    CnConvert = 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
四、成果检验
好了,大功告成,咱们来试试效果吧!
函数名称和相关介绍:
函数参数提示:
繁体转简体效果:
简体转繁体效果:
温馨提醒
1、分享Excel/VBA 知识与实用技巧,赋能办公,高效从容。 
2、提供定制服务,表格设计、数据处理、可视化图表、VBA自动化编程等。 
3、解决重复劳动、数据杂乱、效率低下等办公痛点。有需要的,欢迎后台留言。