Excel反向替换
我正在开发一些软件,在将数据发送到另一个系统之前先清理数据。数据来自世界各地,包含各种必须替换的字符。例如',:@ 接受解析数据的系统具有非常严格的字符集。它允许 字母A到Z(仅大写) 数字0到9 特殊字符/-。空间<= 数据以Excel电子表格的形式出现,因此我在visual basic宏中编写了以下代码 fhl_str包含要清理的数据Excel反向替换,excel,vba,replace,Excel,Vba,Replace,我正在开发一些软件,在将数据发送到另一个系统之前先清理数据。数据来自世界各地,包含各种必须替换的字符。例如',:@ 接受解析数据的系统具有非常严格的字符集。它允许 字母A到Z(仅大写) 数字0到9 特殊字符/-。空间
fhl_str = Replace(fhl_str, ",", " ")
fhl_str = Replace(fhl_str, "'", " ")
fhl_str = Replace(fhl_str, ":", " ")
fhl_str = Replace(fhl_str, ";", " ")
fhl_str = ucase(fhl_str)
现在,每次新的不需要的字符到达时,我们都必须添加一行新的代码。e、 g.fhl_str=替换(fhl_str,@,“”)
我的问题是
我是否可以反转逻辑,以便宏查找A到Z和0到9,并删除任何其他内容。这样,我的代码将成为新的无用字符的未来证明
谢谢如果你觉得正则表达式很难理解,这里有一些VBA可以帮你。它使用ASCII码确定只允许使用的字符。如果您的范围发生变化,您可以在
Case
语句中修改ASCII数字
Public Function RemoveSpecial(s As String) As String
Dim sResult As String
Dim nIndex As Integer
s = UCase$(s)
For nIndex = 1 To Len(s)
Select Case Asc(Mid$(s, nIndex, 1))
Case 65 To 90, 45 To 57, 32, 60 To 61
sResult = sResult & Mid$(s, nIndex, 1)
Case Else
sResult = sResult & " "
End Select
Next
RemoveSpecial = sResult
End Function
用法:
Debug.Print RemoveSpecial("TeSt<>=.@@")
Debug.Print RemoveSpecial(“测试=。@”)
或者类似于:
Range("A1") = RemoveSpecial("TeSt<>=.@@")
Range(“A1”)=RemoveSpecial(“TeSt=。@”)
如果要用单个空格替换坏字符:
Sub KeepOnlyTheGood()
Dim i As Long, L As Long, v As String, CH As String
Dim r As Range
For Each r In Selection
t = ""
v = r.Value
L = Len(v)
For i = 1 To L
CH = Mid(v, i, 1)
If CH Like "[0-9A-Z]" Or CH = "/" Or CH = "-" Or CH = "." Or CH = " " Or CH = "<" Or CH = "=" Then
t = t & CH
Else
t = t & " "
End If
Next i
r.Value = t
Next r
End Sub
Sub KeepOnlyTheGood()
我是长的,我是长的,v是弦,CH是弦
调光范围
对于选择中的每个r
t=“”
v=r.值
L=Len(v)
对于i=1到L
CH=中间(v,i,1)
如果CH像“[0-9A-Z]”或CH=“/”或CH=“-”或CH=“”.”或CH=“”)或CH=“你可以使用a,你可以将长线压缩到,如果CH像“[0-9A-Z