Окраска диапазона ячеек (VBA)

Oday Salim спросил: 10 мая 2018 в 04:47 в: excel

У меня есть код, который проверяет конкретный столбец. Если этот столбец (col 21) FALSE, то я хотел бы покрасить только ячейки в столбцах 8, 9 и 10 в той конкретной строке, где есть ложь.

For i = 9 To LastRow
     If Sheets("Test").Cells(i, 21).Value = "False" Then
     Sheets("Test").Cells(i, 8:10).Font.Color = RGB(255, 0, 0)
     End If
Next i

Это не работает. Есть ли способ сделать это в одной строке, а не окрашивать каждую ячейку сразу?

Спасибо

2 ответа

Есть решение
paul bica ответил: 10 мая 2018 в 05:28

Чтобы исправить ваш код, обновите эту строку: ws.Range(ws.Cells(r, 8), ws.Cells(r, 10)).Font.Color = vbRed


Option ExplicitPublic Sub ShowFalse()
    Dim ws As Worksheet, lr As Long, r As Long    Set ws = ThisWorkbook.Worksheets("Test")
    lr = ws.Cells(ws.Rows.Count, 21).End(xlUp).Row    If lr > 8 Then
        Application.ScreenUpdating = False
        For r = 9 To lr
            If Not IsError(ws.Cells(r, 21)) Then
                If ws.Cells(r, 21).Value = False Then
                    ws.Range(ws.Cells(r, 8), ws.Cells(r, 10)).Font.Color = vbRed
                End If
            End If
        Next
        Application.ScreenUpdating = True
    End If
End Sub

Чтобы ускорить его использование AutoFilter

Public Sub ShowFalseAF()
    Dim ws As Worksheet, lr As Long, fCol As Range, clrCols As Range    Set ws = ThisWorkbook.Worksheets("Test")
    lr = ws.Cells(ws.Rows.Count, 21).End(xlUp).Row    If lr > 8 Then
        Set fCol = ws.Range(ws.Cells(9, 21), ws.Cells(lr, 21))
        Set clrCols = ws.Range(ws.Cells(9, 8), ws.Cells(lr, 10))        Application.ScreenUpdating = False
        fCol.AutoFilter 1, False
        If fCol.SpecialCells(xlCellTypeVisible).Count > 1 Then
            ws.Rows(9).Hidden = ws.Cells(9, 21) <> False
            clrCols.Font.Color = vbRed
            ws.Rows(9).Hidden = False
        End If
        fCol.AutoFilter
        Application.ScreenUpdating = True
    End If
End Sub
Oday Salim ответил: 11 мая 2018 в 01:06
Не могли бы вы объяснить, что делает автофильтр?
paul bica ответил: 18 мая 2018 в 12:31
Извините за поздний ответ: AutoFilter исключает цикл For и выделяет весь видимый диапазон (только нужные столбцы) сразу, что намного быстрее при работе с большими файлами (это будет не заметны для небольшого количества строк)
jainashish ответил: 10 мая 2018 в 10:09

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

Шаг # 01. Выберите диапазон (8:10 - H: J), в котором вы хотите применить форматирование.

Шаг # 02. Нажмите "Условное форматирование" на вкладке "Главная".

Шаг # 03. Нажмите "Новое правило", а затем выберите "Использовать формулу, чтобы определить, какие ячейки нужно форматировать"

Шаг # 04. Выполните приведенную ниже формулу

=OR($U1=FALSE,$U1="FALSE")

Шаг # 05. Нажмите "Формат", чтобы применить требуемое форматирование, и нажмите "ОК".

Дополнительное видео по вопросу: Окраска диапазона ячеек (VBA)

-5- VBA Excel. Работа с диапазоном ячеек Range.

-6- VBA Excel. Заливка ячеек и диапазонов цветом.

-4- VBA Excel. Ячейка Cells. Условие Если То. IF END IF.