用excel 2007 vbareplace函数replace两个字符

我正在尝试编写一个代码来使用VBA将重音字符转换为常规字符。 我可以使用MID函数将重音字符replace为常规字符。 但是有些字符需要用两个字符来replace。 像往常一样,我尝试了MID(string,i,2)。 但它不起作用。 我哪里错了? 这就是我所做的:

Function ChangeAccent(thestring As String) Dim A As String * 1 Dim B As String * 1 Dim C As String * 1 Dim D As String * 1 Dim i As Integer Const LatChars="ßÄÖÜäöü" Const OrgChars= "SSAEOEUEaeoeue" For i = 1 To Len(LatChars) A = Mid(LatChars, i, 1) B = Mid(OrgChars, i, 2) thestring = Replace(thestring, A, B) Next Const AccChars="ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ" Const RegChars= "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy" For i = 1 To Len(AccChars) C = Mid(AccChars, i, 1) D = Mid(RegChars, i, 1) thestring = Replace(thestring, C, D) Next ChangeAccent = thestring End Function 

代码工作正常,逐个replace(1个字符,1个字符),但不符合我的要求。
我想用OrgChars中的2个字符来replacevariablesLatChars中的一个字符。也就是说,用SS和AE来replaceAE等等。在我的情况下,

 Mid(OrgChars, i,2) 

不提取两个字符.. 🙁

这里应该做什么改变?

微小的变化:

Dim B As String * 2

B = Mid(OrgChars,i * 2 – 1,2)

 Option Explicit Function ChangeAccent(thestring As String) Dim A As String * 1 Dim B As String * 2 Dim C As String * 1 Dim D As String * 1 Dim i As Integer Const LatChars = "ßÄÖÜäöü" Const OrgChars = "SSAEOEUEaeoeue" For i = 1 To Len(LatChars) A = Mid(LatChars, i, 1) B = Mid(OrgChars, i * 2 - 1, 2) thestring = Replace(thestring, A, B) Next Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ" Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy" For i = 1 To Len(AccChars) C = Mid(AccChars, i, 1) D = Mid(RegChars, i, 1) thestring = Replace(thestring, C, D) Next ChangeAccent = thestring End Function 
 B = Mid(OrgChars, i,2) 

应该可能是

 B = Mid(OrgChars, i*2-1,2) 

一种方法是使用两个数组 。 一个包含你想要replace的字符和另一个replace的字符。 这种方法依赖于两个arrays彼此同步。 第一个数组中的元素1必须与第二个元素中的元素1相匹配,依此类推。

此方法允许您忽略string长度。 不再需要分别处理1个和2个字符replacestring。 此代码还可以缩放到3,4或更多的字符replace,而无需更改逻辑。

我已经使用拆分函数来构build数组。 我觉得这样可以节省input代码的时间。 但是您可能更喜欢单独定义元素,这可以更容易阅读。

 Sub Demo001() ' Demos how to replace special charaters of various lenghts. Dim ReplaceThis() As String ' Array of characters to replace. Dim WithThis() As String ' Array of replacement characters. Dim c As Integer ' Counter to loop over array. Dim Sample As String ' Contains demo string. ' Set up demo string. Sample = "ß - Ä - Š" ' Create arrays using split function and comma delimitor. ReplaceThis = Split("ß,Ä,Š", ",") WithThis = Split("SS,AE,S", ",") ' Loop over replacements. For c = LBound(ReplaceThis) To UBound(ReplaceThis) Sample = Replace(Sample, ReplaceThis(c), WithThis(c)) Next ' Show result. MsgBox Sample End Sub 

返回

 SS - AE - S 

编辑:答案重写为第一次尝试误解 – 并没有回答 – 操作问题