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
- 如果相邻单词以相同的字母开头,则用“/”replace空格,否则用“&”ExcelmacrosVBAreplace
- VBA EXCEL:模式创buildfunction用字符replace数字
- 如何在VBAmacros中用正则expression式parsingExcel的单元格string
- 在工作表名称中replace多个无效字符
- Excel VBA正则expression式 – 如何匹配3个字符之间可能有其他字符
- 正则expression式来确定一个string是一个范围的名称还是一个单元格的地址
- Notepad ++的正则expression式
- 清理excel中的string
- 正则expression式 – 链接格式