Как найти и выделить строку, если она содержит «SEP» или «SIP» в первых трех символах? - PullRequest
1 голос
/ 02 мая 2019

У меня есть диапазон MAC-адресов Cisco, расположенных в первом столбце первого листа моей рабочей книги.Я хочу выделить данные в этом диапазоне, которые не начинаются с SEP или SIP.Это будут первые три символа в строке.

Dim macRange As Range
Dim macCell As Range

Columns("A:A").Select
Set macRange = Selection
For Each macCell In macRange
    If Not IsEmpty(macCell) Then
        If Left(macCell.Value, 3) not like "*[SEP]*" or "*[SIP]*" Then macCell.Interior.ColorIndex = 6
    End If
Next macCell

Очевидно, это не сработает, но я изо всех сил пытаюсь найти относительную альтернативу.

1 Ответ

0 голосов
/ 02 мая 2019

Вам не нужно использовать left() с оператором like ([] также не требуется).если вам нужно проверить, что строка начинается с определенного текста, тогда используйте "pattern*", если вам нужно проверить последние символы, используйте "*pattern", и если вы хотите проверить, что строка содержит определенный текст, используйте "*pattern*" (или несколько"*pattern1*pattern2*pattern3*").Также обратите внимание, что like является чувствительным к регистру оператором (для удаления чувствительности к регистру вы можете использовать Lcase(), Ucase() или Option Compare Text).Ваш обновленный код ниже:

Sub test0()
    Dim macRange As Range, macCell As Range
    Set macRange = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    For Each macCell In macRange
        With macCell
            If Not (.Value Like "SEP*" Or .Value Like "SIP*") And .Value <> "" Then
                .Interior.ColorIndex = 6
            End If
        End With
    Next macCell
End Sub

или как это:

Sub test1()
    Dim macRange As Range, macCell As Range
    Set macRange = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    For Each macCell In macRange
        With macCell
            If .Value <> "" And Not "SEP|SIP" Like "*" & Left(.Value, 3) & "*" Then
                .Interior.ColorIndex = 6
            End If
        End With
    Next macCell
End Sub

дополнительные варианты:

с использованием select case ...:

Option Compare Text 'if you need to remove case sensitivity

Sub test2()
    Dim macRange As Range, macCell As Range
    Set macRange = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    For Each macCell In macRange
        Select Case Left(macCell.Value, 3)
            Case "SEP", "SIP", "" 'list values that should be ignored
            Case Else: macCell.Interior.ColorIndex = 6
        End Select
    Next macCell
End Sub

используя словарь:

Sub test3()
    Dim macRange As Range, macCell As Range, dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    dic.comparemode = vbTextCompare 'use in case when you need to remove case sensitivity for dictionary
    dic.Add "SEP", ""
    dic.Add "SIP", ""
    dic.Add "", ""
    Set macRange = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    For Each macCell In macRange
        If Not dic.exists(Left(macCell.Value, 3)) Then macCell.Interior.ColorIndex = 6
    Next macCell
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...