Перебор строк, если 3 ячейки соответствуют критериям, то выделите ячейки, если нет, то скройте строку

#excel #vba

#excel #vba

Вопрос:

Я хотел бы настроить электронную таблицу, которая при нажатии кнопки просматривает ячейки в столбцах 4, 7 и 8 в каждой строке, и если критерии трех ячеек верны, вся строка выделяется. Если критерии неверны, я хочу скрыть неправильные строки.

Кажется, я застреваю там, где код выбирает строку для выделения. Я пытался использовать ActiveCell.Весь поток.Интерьер.Цвет, но он всегда либо выделяет все в диапазоне, либо выделяет строку любой ячейки, которая была выбрана перед нажатием кнопки.

 Private Sub CommandButton1_Click()
Dim rng As Range: Set rng = Application.Range("A5:I54")
Dim cell As Range
Dim row As Range
Dim i As Integer

       For i = 1 To rng.Rows.Count
                If rng.Cells(RowIndex:=i, ColumnIndex:=4).Text = "Yes" And rng.Cells(RowIndex:=i, ColumnIndex:=7).Text = "Yes" And rng.Cells(RowIndex:=i, ColumnIndex:=8).Text = "No" Then
                rng.EntireRow.Interior.Color = vbYellow
                ElseIf rng.Interior.ColorIndex = vbWhite Then rng.EntireRow.Hidden = True
                End If
        Next

End Sub
  

Как я могу заставить код распознавать критерии строки и правильно выделять ее?

Комментарии:

1. Ваша проблема в том, что вы устанавливаете индекс столбца для стандартных номеров столбцов, но работаете в пределах указанного rng, поэтому первый столбец диапазона будет 1, а не 4.

Ответ №1:

Если я понял вашу проблему, этот код сделает это:

 Private Sub CommandButton1_Click()

For i = 5 To 54
    If Cells(i, 4) = "Yes" And Cells(i, 7) = "Yes" And Cells(i, 8) = "No" Then
        Range(Cells(i, 4), Cells(i, 9)).Interior.Color = vbYellow
    ElseIf Cells(i, 4).Interior.Color = vbWhite Then
        Cells(i, 4).EntireRow.Hidden = True
    End If
Next

End Sub
  

Комментарии:

1. Вы можете избавиться от ElseIf все, что вам нужно, это Else: Cells(i,1).EntireRow.Hidden = True

2. Большое вам спасибо! Это сработало отлично. Я не совсем понимаю, почему ваш код работает без объявления диапазонов. Можете ли вы мне это объяснить?

3. @GMalc вы, вероятно, правы, из текста сообщения действительно похоже, что все не желтые строки будут белыми. Но поскольку в его коде была проверка на белый цвет, я подумал, что было бы лучше сохранить ее.

4. @Moonshine54; диапазон задается с помощью 5 To 54 для строк и столбцов 4, 7, 8, and 9 . Он смог использовать стандартные номера столбцов, потому что он не работает в пределах установленного диапазона. Кроме того, если вы планируете добавить больше строк на свой лист, вам нужно будет добавить переменную последней строки.

5. @Moonshine54 вам не следует объявлять «ячейку» и «строку», как вы это делали, они уже являются объектами в VBA. В моем коде, поскольку я не указал workbook и worksheet, Excel предполагает, что ячейки (i, 4) являются ThisWorkbook. ActiveSheet. Ячейки (i, 4).