Исправление простого кода VBA с помощью операторов if для цветных столбцов - PullRequest
0 голосов
/ 06 ноября 2019

это мой первый пост. Я хочу исправить код, чтобы правильно раскрасить столбцы, а также сделать код проще. Очень ценю ваши отзывы.

Это для Excel VBA. Цвет кодируется для целых столбцов независимо от операторов if.

Нет сообщения об ошибке, но код окрашивает 2 целых столбца в красный цвет, когда я хочу, чтобы они были красными, если обе соответствующие ячейки в строке имеют значение.

Sub ColorCol()

Dim i As Long

For i = 2 To Rows.Count

    If Not IsEmpty(Columns("AB").Value) And Not IsEmpty(Columns("CD").Value) Then
        Cells(i, 2).Interior.Color = vbRed
        Cells(i, 3).Interior.Color = vbRed
    End If
    If Not IsEmpty(Columns("PQ").Value) And Not IsEmpty(Columns("RS").Value) Then
        Cells(i, 2).Interior.Color = vbRed
        Cells(i, 3).Interior.Color = vbRed
    End If

Next i

End Sub

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Вы хотите проверить .Value каждой отдельной ячейки.

Таким образом,

If Not IsEmpty(Columns("AB").Value) And Not IsEmpty(Columns("CD").Value)

становится

If Not IsEmpty(Cells(i, "AB").Value) And Not IsEmpty(Cells(i, "CD").Value)

и аналогично для

If Not IsEmpty(Columns("PQ").Value) And Not IsEmpty(Columns("RS").Value)

Вы можете объединить операторы If (хотя я не уверен, что это помогает с удобочитаемостью). Используйте скобки, чтобы заключить каждое условие:

If (Not IsEmpty(Cells(i, "AB").Value) And Not IsEmpty(Cells(i, "CD").Value)) Or _
   (Not IsEmpty(Cells(i, "PQ").Value) And Not IsEmpty(Cells(i, "RS").Value)) Then

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

0 голосов
/ 06 ноября 2019

Если я правильно понял ваш вопрос, это будет подходом для сравнения ячеек в одной строке и окрашивания их в красный цвет, если они содержат одинаковое значение:

Option Explicit

Sub ColorCol()

Dim i As Long

For i = 2 To 6

    If Cells(i, 2).Value = Cells(i, 3).Value Then
       Cells(i, 2).Interior.Color = vbRed
       Cells(i, 3).Interior.Color = vbRed
    End If

Next i

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