Помещение регулярного выражения в код VBA

Я задал вопрос неделю назад о том, чтобы удалить все белые пробелы из ячеек в столбце и скопировать их / вставить в соседний столбец. Я помог кому-то помочь, но код не всегда работает. Что хорошо, но чем больше я использую код, тем больше проблем, похоже, повышается. Код VBA использует R TRIM в качестве своей операции для обрезки белого пространства, но это, похоже, не всегда работает. Всегда кажется странным символом белого пробела, который не будет удалять. Код, который я собрал, прежде чем я спросил свой первоначальный вопрос, сделал это, но развертывание его в разных книгах не работало.

Вот мой оригинал

Function simpleCellRegex(myRange As Range) As String

    Dim Regex As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim strReplace As String
    Dim strOutput As String

    strPattern = "s+$"

        If strPattern <> "" Then
            strInput = myRange.Value
            strReplace = ""

        With Regex
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If Regex.Test(strInput) Then
            simpleCellRegex = Regex.Replace(strInput, strReplace)
        Else
            simpleCellRegex = strInput
        End If
    End If
End Function

Вот код, который я получил от просьбы о помощи

Option Explicit
Public Sub RemoveEndWhiteSpace()
    Dim arr(), i As Long, myRange As Range
    Set myRange = Selection
    If myRange.Columns.Count > 1 Or myRange Is Nothing Then Exit Sub
    If myRange.Count = 1 Then
        myRange = RTrim$(myRange.Value)
        Exit Sub
    Else
        arr = myRange.Value
        For i = LBound(arr, 1) To UBound(arr, 1)
            arr(i, 1) = RTrim$(arr(i, 1))
        Next i
        myRange.Offset(, 1) = arr
    End If
End Sub

Я попробовал несколько способов поместить команду Regex в рабочий код, но он всегда дает мне ошибку. Я пытался читать VBA, но мне ничего не помогает. Причина, по которой я хочу это сделать, заключается в том, что я работаю с огромными объемами данных, и данные могут выглядеть очень сумасшедшими. Я хочу очистить сумасшедшие данные, сначала удалив пробелы в каждой ячейке столбца, затем выведя эти ячейки в соседний столбец. Я хотел бы по-настоящему комбинировать код, но я понятия не имею, как это сделать.

excel,vba,excel-vba,

0

Ответов: 2


1

Решая только вопрос о том, как включить вашу функцию ...

Непроверенные:

Option Explicit
Public Sub RemoveEndWhiteSpace()
    Dim arr(), i As Long, myRange As Range
    Set myRange = Application.Intersect(Selection, ActiveSheet.UsedRange)
    If myRange Is Nothing Then Exit Sub
    If myRange.Columns.Count > 1 Then Exit Sub

    If myRange.Count = 1 Then
        myRange.Offset(0,1).Value = simpleCellRegex(myRange.Value)
    Else
        arr = myRange.Value
        For i = LBound(arr, 1) To UBound(arr, 1)
            arr(i, 1) = simpleCellRegex(arr(i, 1))
        Next i
        myRange.Offset(0, 1).Value = arr
    End If
End Sub


Function simpleCellRegex(v) As String

    Static Regex As RegExp

    'need to create/configure regex?
    If Regex Is Nothing Then
        Set Regex = New Regex
        With Regex
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = "s+$"
        End With
    End If

    If Regex.Test(strInput) Then
        simpleCellRegex = Regex.Replace(v, "")
    Else
        simpleCellRegex = v
    End If

End Function

0

'Заменяет все символы данных в диапазоне данных, которые не определены в шаблоне, с символом «Заменить».

Public Sub RegExMatchAndReplace(ByVal Pattern As String, ByVal Data As Range, ByVal Replace As String)

'//////////////////////////////////////////////////////////////////////////

Dim oRegEx As New RegExp
Dim rPtr As Range

'///////////////////////////////////////////////////////////////////////////
For Each rPtr In Data
    With oRegEx
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = Pattern
        rPtr.Value = oRegEx.Replace(rPtr.Value, Replace)
    End With
Next

End Sub
первенствует, VBA, Excel-VBA,
Похожие вопросы