Удалить строки на основе шаблона соответствия REGEX Excel VBA - PullRequest
0 голосов
/ 30 сентября 2019

Я хотел бы использовать макрос в Excel для удаления строк, если значение ячейки не соответствует выражению регулярного выражения. Более конкретно, если значение ячейки не начинается с цифры, удалите всю строку

Пример

перед макросом

после макроса

Поэтому я пытался собрать воедино некоторый код с форумов, используя .AutoFilter, но я не думаю, что он принимает в качестве критерия объект регулярного выражения, только строки ..

Sub test()
    Dim table As Range
    Dim ws As Worksheet
    Dim upperLeft As Range
    Dim digitOnly As Object

    Set digitOnly = CreateObject("vbscript.regexp")
    digitOnly.Pattern = "^[\d]"
    digitOnly.Ignorecase = True

    Set ws = ActiveSheet
    Set upperLeft = ws.Range("A2")
    Set table = upperLeft.CurrentRegion

    With table
    .AutoFilter Field:=1, Criteria1:=digitOnly
    .Offset(1, 0).EntireRow.Delete
    End With
    End Sub

Может кто-нибудь предложить альтернативу или, возможно, сказать мне, что я делаю неправильно? Спасибо:).

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

В соответствии с рекомендацией @PaichengWu, я использовал его выражение LIKE и прочитал некоторые другие сообщения :

Sub DeleteRow()
    Dim i As Integer
    For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
        If Not Range("A" & i).Value Like "#*" Then
            Range("A" & i).EntireRow.Delete
        End If
    Next i
End Sub

Happy Chap :) Спасибо.

0 голосов
/ 02 октября 2019

Примерно так:

Sub test()
    Dim table As Range, c As Range
    Dim ws As Worksheet

    Set ws = ActiveSheet
    Set table = ws.Range("A2").CurrentRegion

    For i = table.columns(1).cells.count to 2 Step -1
        With table.columns(1).cells(i)
            If Not .Value like "#*" then .EntireRow.Delete
        End with  
    Next i

End Sub
...