我对宏游戏完全陌生,但我学习速度非常快。 这是我的问题:
我的数据表中包含的特殊字符描述在转换为.csv文件时无法上传到其他系统。 我已经将大部分内容用于替换版权符号,但是引号和撇号仍然是一个问题。我的一些数据将如下所示:
48“显示
“P2-Cam”缩放
使用“Snagless”15'电缆
我需要的是解析此列中的单元格(在我的情况下为“C”),如果有一个数字继续,则用英尺或'替换为英尺,但如果没有,则将其完全删除。
这是我到目前为止写下的内容:
Sub RemoveSpecialCharacters()
' Removes Special Characters from cells
'
Columns("C:C").Select
Selection.Replace What:="™", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:C").Select
Selection.Replace What:="®", Replacement:="", LookAt:=xlPart, _
SearchOrder:= xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("C:C").Select
Selection.Replace What:="©", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
我意识到我可以设置所有规格。字符作为数组,但我目前没有足够的练习。一些在线指南很有帮助,但我显然需要进行更多的研究。
非常感谢!
答案 0 :(得分:0)
根据其中一条评论,您最好的选择是使用正则表达式。这是一种方法,但它不会在同一个字符串中处理多个匹配。它只处理第一场比赛("或') - 最好修改它,以便递归获取字符串中的所有匹配项,如果这是一个问题您。我假设你的所有字符串都在列#34; A"第一个工作表。至少这是一个例子,如果你想扩展它:
Sub ReplaceFtAndInches()
Dim regExInFt As New RegExp
regExInFt.Pattern = "\s*(-{0,1}\d*\.{0,1}\d+)\s*(\""|\')\s+"
With Sheets(1):
Dim val As String
Dim i As Integer, pos As Integer
Dim mat As Object
Dim str As String
For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row:
val = .Cells(i, "A").Value
Set mat = regExInFt.Execute(val)
If mat.Count = 1 Then
str = mat(0).SubMatches(1)
pos = InStr(1, val, str)
If str = """" Then
.Cells(i, "A") = Mid(val, 1, pos - 1) & " inches" & Mid(val, pos + 1)
Else
.Cells(i, "A") = Mid(val, 1, pos - 1) & " feet" & Mid(val, pos + 1)
End If
End If
Next
End With
End Sub
正则表达式查找任意数量的空格,后跟一个负数或正十进制/整数,后跟任意数量的空白字符,然后是"或者'。它转换"到英寸和'到脚。
请注意,要在Excel中启用正则表达式,您应该按照此post中的说明进行操作。