Excel反向REPLACE

时间:2018-06-12 16:55:24

标签: excel vba replace

我正在研究一些在将数据发送到另一个系统之前清理数据的软件。数据来自世界各地,包含各种必须替换的字符。例如 ', : ; @

接受解析数据的系统具有非常严格的字符集。它允许 字母A到Z(仅大写) 数字0到9 特殊字符/ - 。空间< =

数据到达Excel电子表格,因此我在visual basic宏中编写了以下代码。

fhl_str包含要清理的数据

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)

现在,每次有新的不需要的字符到达时,我们都必须添加一行新的代码。例如fhl_str =替换(fhl_str,“@”,“”)

我的问题是 我可以反转逻辑,以便宏查找A到Z和0到9并删除其他任何内容。这样我的代码将成为新的不需要的字符的未来证明。

由于

2 个答案:

答案 0 :(得分:1)

如果您发现正则表达式难以理解,这里有一些VBA会这样做。它使用ASCII代码确定允许的唯一字符。如果范围发生变化,您可以修改a,b,forEach语句中的ASCII数字。

Case

<强>用法:

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<>=.@@")

ASCII Codes

答案 1 :(得分:1)

如果您想用一个空格替换坏字符:

@Component(
selector: 'my-app',
styleUrls: const ['app_component.css'],
templateUrl: 'app_component.html',
directives: const [CORE_DIRECTIVES, materialDirectives, TodoListComponent],
providers: const [materialProviders],
)
class AppComponent {

}