如果有一个号码继续,请替换“和”,然后清理其余的

时间:2017-04-06 22:28:52

标签: vba excel-vba replace character excel-2010

我对宏游戏完全陌生,但我学习速度非常快。 这是我的问题:

我的数据表中包含的特殊字符描述在转换为.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

我意识到我可以设置所有规格。字符作为数组,但我目前没有足够的练习。一些在线指南很有帮助,但我显然需要进行更多的研究。

非常感谢!

1 个答案:

答案 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中的说明进行操作。