Excel обратный ЗАМЕНА - PullRequest
       5

Excel обратный ЗАМЕНА

0 голосов
/ 12 июня 2018

Я работаю над некоторым программным обеспечением, которое очищает данные перед отправкой в ​​другую систему.Данные поступают со всего мира и содержат различные символы, которые необходимо заменить.Например ', : ;@

Система, которая принимает проанализированные данные, имеет очень строгий набор символов.Он допускает буквы от A до Z (только в верхнем регистре), цифры от 0 до 9, специальные символы / -.Пробел <= </p>

Данные поступают в электронные таблицы 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 = Replace (fhl_str, "@", "")

Мой вопрос: могу ли я изменить логику так, чтобы макрос искал от A до Z и от 0 до 9 и удалил что-нибудь еще?Таким образом, мой код станет будущим доказательством для новых нежелательных символов.

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Если вы хотите заменить плохие символы одним пробелом:

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
0 голосов
/ 12 июня 2018

Вот некоторый VBA, который сделает это, если вам трудно понять регулярное выражение.Он использует код ASCII для определения только разрешенных символов.Если ваша область действия изменяется, вы можете изменить номера 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<>=.@@")

или что-то вроде:

Range("A1") = RemoveSpecial("TeSt<>=.@@")

ASCII коды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...