Vba 替换“;和';如果有一个数字正在进行,则清洁其余部分

Vba 替换“;和';如果有一个数字正在进行,则清洁其余部分,vba,excel,replace,character,excel-2010,Vba,Excel,Replace,Character,Excel 2010,我对macros游戏完全陌生,但我学得很快。 我的问题是: 我有一份包含特殊字符的数据表,这些字符在转换为.csv文件时无法上传到另一个系统。 我已经把大部分的版权符号都换成了零,但是引号和撇号仍然是个问题。我的一些数据如下所示: 48英寸显示器 “P2凸轮”变焦 带“无蛇形”15'电缆 我需要的是解析此列中的单元格(在我的例子中是“C”),如果有数字,则将“inch”替换为“inch”或“feet”,如果没有,则将其完全删除 到目前为止,我写下了以下内容: Sub RemoveSpecialC

我对macros游戏完全陌生,但我学得很快。 我的问题是:

我有一份包含特殊字符的数据表,这些字符在转换为.csv文件时无法上传到另一个系统。 我已经把大部分的版权符号都换成了零,但是引号和撇号仍然是个问题。我的一些数据如下所示:

48英寸显示器

“P2凸轮”变焦

带“无蛇形”15'电缆

我需要的是解析此列中的单元格(在我的例子中是“C”),如果有数字,则将“inch”替换为“inch”或“feet”,如果没有,则将其完全删除

到目前为止,我写下了以下内容:

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
我意识到我可以将所有规范字符设置为一个数组,但目前我还没有足够的实践。一些在线指南很有帮助,但显然我需要做更多的研究


多谢

根据其中一条评论,您最好使用正则表达式。这里有一种方法,但它不会处理同一字符串中的多个匹配。它将只处理第一个匹配项(或者“或”)-最好修改它,以便递归地获取字符串中的所有匹配项(如果这对您来说是个问题)。我假设您的所有字符串都在第一个工作表的“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中启用正则表达式,您应该按照此处的说明进行操作。

哦,是的,对不起。这都是excel 2010中的内容。哦,伙计,谢谢你,我显然不知道我在做什么,我很抱歉。你可能仍然需要发布一些代码,显示你已尝试解决此问题,但有人可能会给你一个“为我写一些代码“一段没有它的代码。你需要足够聪明的代码将
48”
替换为
48英寸
,而不是
“P2凸轮”
替换为
英寸P2凸轮
。研究在VBA中创建循环,然后是
Array(,)
以及您可能需要的
Chr()
Asc()
。您可以使用几种不同的方法。这里有一篇关于在Excel中使用正则表达式处理堆栈溢出的精彩介绍。过来看: