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