Сравнение строк по двум столбцам не возвращает результат оператора If - PullRequest
0 голосов
/ 09 февраля 2019

Мне удалось заставить это сравнение строк работать с одним столбцом.Я расширил диапазон до двух столбцов, и при просмотре окна местных жителей появляется сравнение.По причинам, которые я не смог расшифровать, хотя оператора if для изменения цвета ячейки, если сравнение строк положительное, не происходит.

Не получаю никаких ошибок, но также не получаю никакого ответа.

Я прошел и наблюдал за локальным окном, и все, что я там наблюдал, говорит мне, что проводится сравнениепоэтому я несколько сбит с толку относительно того, что может отсутствовать.

Sub ColourDuplicateNameTwoCol() 'Work in progress

    Dim baseName As Range
    Dim allName As Range 
    Dim cell As Range

    With ThisWorkbook.Worksheets("sheet1")
            Set baseName = Range("c1")
            Set allName = Range("a1:b7")

            For Each cell In allName.cells
                If StrComp(baseName.Value, cell.Value, vbTextCompare) = 1 Then
                  cell.Interior.Color = vbYellow
                End If
            Next cell

    End With

End Sub

Вот рабочая версия с одним столбцом, о которой я упоминаю

Sub ColourDuplicateName() 'Works 

Dim baseName As Range

With ThisWorkbook.Worksheets("sheet1")
Set baseName = .Range("b1")

For I = 1 To 7
    If StrComp(baseName.Value, cells(I, 1).Value, vbTextCompare) = 1 Then
    cells(I, 1).Interior.ColorIndex = 3
    End If
Next I

End With
End Sub

1 Ответ

0 голосов
/ 10 февраля 2019

Ваша интерпретация возвращаемого значения из StrComp неверна.Проверьте VBA HELP.

Option Explicit
Sub ColourDuplicateNameTwoCol() 'Work in progress

    Dim baseName As Range
    Dim allName As Range
    Dim cell As Range

    With ThisWorkbook.Worksheets("sheet1")
            Set baseName = .Range("c1")
            Set allName = .Range("a1:b7")

            For Each cell In allName.Cells
                If StrComp(baseName.Value, cell.Value, vbTextCompare) = 0 Then
                  cell.Interior.Color = vbYellow
                End If
            Next cell

    End With

End Sub

enter image description here

Приведенный выше код, который просто показывает проблему StrComp, с которой вы столкнулись, не очень динамичен.Вам нужно будет добавить код для удаления цвета, а затем добавить его обратно, если baseName изменится.Конечно, вы можете сделать это с помощью макроса события.

Однако более динамичным методом будет просто настроить условное форматирование.Вам нужно будет сделать это только один раз, и он может выполнить то же самое.

Чтобы сделать это в коде VBA, например:

Option Explicit
Sub ColourDuplicateNameTwoCol() 'Work in progress

    Dim baseName As Range
    Dim allName As Range
    Dim cell As Range

    With ThisWorkbook.Worksheets("sheet1")
            Set baseName = .Range("c1")
            Set allName = .Range("a1:b7")
    End With

    With baseName.FormatConditions
        .Delete
        .Add Type:=xlCellValue, _
            Operator:=xlEqual, _
            Formula1:=baseName
        .Item(1).Interior.Color = vbYellow
    End With

End Sub

Этот код должен бытьизменен, если у вас есть другие FormatConditions для allNames, которые вы хотите сохранить.

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