Excel 使用Replace函数将一个字符替换为两个字符

Excel 使用Replace函数将一个字符替换为两个字符,excel,vba,string,Excel,Vba,String,我正在尝试将重音字符转换为常规字符。某些字符需要替换为两个字符。我尝试了MID(string,I,2) 代码正在逐个替换(1个字符替换1个字符) 我想用OrgChars中的2个字符替换变量LatChars中的一个字符。i、 eß与SS、eÄ与AE等等 Mid(OrgChars,i,2)没有提取两个字符。一种方法是使用两个字符。一个包含要替换的字符,另一个包含要替换的字符。此方法取决于两个阵列是否彼此同步。第一个数组中的元素1必须与第二个数组中的元素1匹配,依此类推 此方法允许您忽略字符串长度。不

我正在尝试将重音字符转换为常规字符。某些字符需要替换为两个字符。我尝试了
MID(string,I,2)

代码正在逐个替换(1个字符替换1个字符)

我想用OrgChars中的2个字符替换变量LatChars中的一个字符。i、 eß与SS、eÄ与AE等等

Mid(OrgChars,i,2)
没有提取两个字符。

一种方法是使用两个字符。一个包含要替换的字符,另一个包含要替换的字符。此方法取决于两个阵列是否彼此同步。第一个数组中的元素1必须与第二个数组中的元素1匹配,依此类推

此方法允许您忽略字符串长度。不再需要分别处理1和2个字符的替换字符串。此代码还可以扩展到3、4或更多字符替换,而无需逻辑更改

我已经使用该函数构建了阵列。我发现这样可以在输入代码时节省时间。但是您可能更喜欢单独定义元素,这可能更易于阅读

示例

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
编辑:答案被改写为第一次尝试被误解-并且没有回答-操作问题

B = Mid(OrgChars, i,2) 
应该是

B = Mid(OrgChars, i*2-1,2) 
小改动:

尺寸B为字符串*2

B=中间(OrgChars,i*2-1,2)


这也是我在代码中使用的。请看一下我上面的代码,让我知道我应该如何操作它。我认为一种方法是使用数组。我将编辑我的答案进行演示。
Mid(OrgChars,I,2)
实际上是提取2个字符,但您已声明
B
为长度为1的字符串。另外,你的
i
没有正确地为
OrgChars
编制索引。我知道我遗漏了一些东西。我知道在某个地方这将是一个愚蠢的错误。非常感谢。:)@亚历克斯·加布里埃尔很乐意帮忙。如果我的回答解决了你的问题,你能把它作为答案吗?
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