如何编写vba代码以删除和替换UTF8字符
我有这段代码,但我仍然无法用简单的“占位符”替换数据中的非英语字符,如越南语或泰语 感谢您的帮助有关在VBA代码中使用正则表达式的详细信息,请参阅如何编写vba代码以删除和替换UTF8字符,vba,excel,Vba,Excel,我有这段代码,但我仍然无法用简单的“占位符”替换数据中的非英语字符,如越南语或泰语 感谢您的帮助有关在VBA代码中使用正则表达式的详细信息,请参阅 然后在像这样的函数中使用正则表达式来处理字符串。这里我假设您想用占位符替换每个无效的字符,而不是整个字符串。如果是整个字符串,则不需要进行单个字符检查,只需对正则表达式模式中的多个字符使用+或*限定符,然后一起测试整个字符串 Function LatinString(str As String) As String ' After incl
然后在像这样的函数中使用正则表达式来处理字符串。这里我假设您想用占位符替换每个无效的字符,而不是整个字符串。如果是整个字符串,则不需要进行单个字符检查,只需对正则表达式模式中的多个字符使用
+
或*
限定符,然后一起测试整个字符串
Function LatinString(str As String) As String
' After including a reference to "Microsoft VBScript Regular Expressions 5.5"
' Set up the regular expressions object
Dim regEx As New RegExp
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
' This is the pattern of ALLOWED characters.
' Note that special characters should be escaped using a slash e.g. \$ not $
.Pattern = "[A-Za-z0-9]"
End With
' Loop through characters in string. Replace disallowed characters with "?"
Dim i As Long
For i = 1 To Len(str)
If Not regEx.Test(Mid(str, i, 1)) Then
str = Left(str, i - 1) & "?" & Mid(str, i + 1)
End If
Next i
' Return output
LatinString = str
End Function
您可以通过以下方式在代码中使用它:
Dim cell As Range
For Each cell In Range("A1", Cells(Rows.Count, "A").End(xlUp))
cell.Value = LatinString(cell.Value)
Next
对于不使用正则表达式而将Unicode字符串转换为UTF8字符串的字节级方法,请检查您可以替换e中的任何字符。GASCII范围(前128个字符),带有占位符,使用以下代码:
选项显式
子测试()
Dim oCell As系列
使用CreateObject(“VBScript.RegExp”)
.Global=True
.Pattern=“[^u0000-u00F7]”
对于[A1:C4]中的每个oCell
oCell.Value=.Replace(oCell.Value,“*”)
下一个
以
端接头
在下一个语句之后,您不也需要一个i和一个单元格吗?看看如何使用RegEx
instead@Luuklag您不必在Next
语句之后包含计数器变量,这是一种很好的做法,因为它增加了可读性。请参阅@Wilson您是要用占位符替换非英语字符,还是要更改整个单元格(如果包含非英语字符)的值?您可能会发现它很有用,其中包含将字符串转换为UTF-8字符的代码,并在未知字符中填充?
@Wolfie很好知道,但还不太老,无法学习;)为什么不忽略大小写,使用一个更简单的表达式呢?你完全可以这样做@Tom,我一直在尽可能地保持这个例子与OP模式的[简化版本]以及链接问题中给出的例子相似。将我包含的行省略会更整洁,因为默认值是IgnoreCase=False
,我只是显示了一些选项!)
Dim cell As Range
For Each cell In Range("A1", Cells(Rows.Count, "A").End(xlUp))
cell.Value = LatinString(cell.Value)
Next