我有一个带有名称列的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
答案 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