Excel VBAreplace字符 – char-by-char vs regex(?)

我一直在使用下面的代码来replace等同于/可接受的replace重音字符:

Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿø" Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyyo" For x = 1 To dataRange ActiveCell.Offset(1, 0).Activate For i = 1 To Len(AccChars) y = Mid(AccChars, i, 1) z = Mid(RegChars, i, 1) ActiveCell.Replace What:=y, _ Replacement:=z, _ LookAt:=xlPart, _ MatchCase:=True Next i Next x 

由于这是针对范围内的每个单元逐个字符地完成的,所以在处理数以万计的logging时,该过程变得非常慢(QUITE!)。

我最近用正则expression式replace了一个不同的char-by-char评估过程(虽然速度有点快),但是我不确定这种特殊的评估和replace过程是否适合正则expression式样式的解决scheme。

我不熟悉在VBA平台上使用正则expression式(我可以在表单级别上做基本的正则expression式函数),所以我现在不知道我是否无法得到这个工作,太多的新手去实现它,或者如果我不能得到它的工作,因为它是不可能完成使用正则expression式作为解决scheme。

我希望能够从正确认识正则expression式的人那里得到任何build议,以便对这个需求做出决定。

下面是一些使用数组和replace的VBA代码的例子。 然后将数组写回到工作表(尽pipe在这个实现中的不同位置),AccChars和RegChars需要是相同长度的string。

 Option Explicit Sub ReplaceAccents() Const AccChars As String = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿø" Const RegChars As String = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyyo" Dim rSrc As Range Dim V As Variant Dim I As Long, J As Long Set rSrc = Range("a1", Cells(Rows.Count, "A").End(xlUp)) V = rSrc For I = 1 To UBound(V, 1) For J = 1 To Len(AccChars) V(I, 1) = Replace(V(I, 1), Mid(AccChars, J, 1), Mid(RegChars, J, 1), compare:=vbBinaryCompare) Next J Next I rSrc.Offset(columnoffset:=5) = V End Sub 

使用for-loop循环遍历每个字母replace对,并将它们插入到这里:

 Selection.Replace What:=letterToReplace,Replacement:=replacementLetter,- LookAt:=xlPart,SearchOrder:=xlByRows,MatchCase:=True,SearchFormat:=False,- ReplaceFormat:=False