将特殊字符转换为字母

时间:2013-06-19 06:47:38

标签: excel-vba vba excel

我有一个带有名称列的excel文件,该文件使用不同的语言。我需要将此名称转换为标准英语语言。

示例:

HỒĐĂNGTẤN必须转换为HO DANG TAN。

NGUYỄNĐỨCKIÊN - NGUYEN DUC KIEN

OO TH TH TH TH TH TH TH TH TH TH TH

2 个答案:

答案 0 :(得分:6)

步骤1:打开Microsoft Visual Basic for Applications窗口。

第2步:点击插入 - >单击模块,然后在模块窗口中输入以下宏。

Function StripAccent(thestring As String)
Dim A As String * 1
Dim B As String * 1
Dim i As Integer

Const AccChars= "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"
Const RegChars= "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"

For i = 1 To Len(AccChars)
A = Mid(AccChars, i, 1)
B = Mid(RegChars, i, 1)
thestring = Replace(thestring, A, B)
Next
StripAccent = thestring
End Function

第3步:然后转到空白单元格并将公式粘贴到单元格中:
=CheckStringCHAR(InString)
例如=CheckStringCHAR("ù")=CheckStringCHAR(A2)

字符列表并非详尽无遗。更多http://en.wikipedia.org/wiki/List_of_Latin-script_letters#Letters_with_diacritics

答案 1 :(得分:0)

只是为了它的乐趣,下面是一个更有效的功能版本,它正在上面粘贴的网页作为答案。

样本测试结果(10,000个char字符串的100个循环)。每次调用的时间是毫秒,从QueryPerformanceTimer中获取。

旧:最小:57.6毫秒,平均值:65.4毫秒

新:最小:22.1毫秒,平均值:24.4毫秒

性能改进来自于不在每次替换时创建字符串的新副本,而是使用Mid $语句替换字符。

Public Function StripAccent(ByVal txt As String) As String
    Dim i As Long, j As Long, n As Long
    Const c1 = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"
    Const c2 = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"
    n = Len(c1)
    For i = 1 To n
        j = 0
        Do
            j = InStr(j + 1, txt, Mid$(c1, i, 1), vbBinaryCompare)
            If j > 0 Then Mid$(txt, j, 1) = Mid$(c2, i, 1) Else Exit Do
        Loop
    Next
    StripAccent = txt
End Function