#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).