Excel VBA Скрыть строки на основе цвета ячейки, и если команда говорит «Да»,

Я пытаюсь скрыть строки по двум критериям:

Критерии 1: Если ячейка Q3 имеет значение «да», скрыть ячейки, которые соответствуют критериям 2

Критерии 2: Если ячейки в столбце A являются цветом RGB (253, 233, 217), скройте эту целую строку.

По существу, у меня есть список дней, который отслеживает количество писем в день, и я хочу скрыть любые выходные, чтобы они не отображались на графике, показывающем тренд. Я опускаю его вниз, чтобы все, что им нужно сделать, это нажать «Да» или «Нет» из выпадающего списка в ячейке Q3, чтобы скрыть строки выходных. Выходные дни окрашены в светло-оранжевый (код rgb, указанный выше). также важно, что если ячейка Q3 заявляет «нет», то все строки должны отображать / оставаться незакрытыми. Код, который у меня есть сейчас:

Sub HideRows() BeginRow = 1 EndRow = 1000 ChkCol = 1 ChkCommCol = 17 For RowCnt = BeginRow To EndRow If Cells(RowCnt, ChkCommCol).Value = "Yes" Then If Cells(RowCnt, ChkCol) = RGB(253, 233, 217) Then Cells(RowCnt, ChkCol).EntireRow.Hidden = True Else Cells(RowCnt, ChkCol).EntireRow.Hidden = False If Cells(RowCnt, ChkCol).EntireRow.Hidden = True Then Cells(RowCnt, ChkCol).EntireRow.Unhide = True End If Next RowCnt End Sub 

Если вам нужна дополнительная информация, дайте мне знать! Большое вам спасибо за вашу помощь.

вы можете попробовать этот код в любой области кода модуля:

 Sub HideRows() Dim beginRow As Long, endRow As Long, chkCol As Long, chkCommCol As Long, rowCnt As Long beginRow = 1 endRow = cells(Rows.Count, 1).End(xlUp).Row '<--| set 'endRow' to column A last not empty cell row index chkCol = 1 chkCommCol = 17 Rows.EntireRow.Hidden = False 'unhides all rows. Subsequent code will hide relevant ones If cells(3, chkCommCol).Value = "Yes" Then '<--| if Q3 value is "Yes" For rowCnt = beginRow To endRow '<--| loop through the "limit" rows indexes With cells(rowCnt, chkCol) '<--| reference current cell to be cheked .EntireRow.Hidden = (.Interior.Color = RGB(253, 233, 217)) '<--| set its corresponding Row 'Hidden' property to True if currently referenced cell has wanted color End With Next End If End Sub 

и поместите следующий код в свою соответствующую область кода рабочего листа:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$Q$3" Then HideRows '<--| if "Q3" cell has been changed then run 'HideRows' macro End Sub 

Прежде всего, вы пропускаете несколько инструкций End If во всем своем коде, я отредактировал ваш вопрос с некоторым отступом, чтобы показать, где они находятся, попробуйте сделать отступ в будущем, чтобы помочь вам закрыть инструкции Loops и If .

Что касается ваших инструкций If , вам нужно проверить интерьеры ячеек на их цвета, а не только на ячейки. Это делается с помощью синтаксиса:

 Cells(x, y).Interior.Color = RGB(r, g, b) 

Попробуй это:

 Sub HideRows() BeginRow = 1 EndRow = 1000 ChkCol = 1 ChkCommCol = 17 Application.ScreenUpdating = False 'Speeds up subroutine Application.Calculation = xlCalculationManual If Cells(3, ChkCommCol).Value = "Yes" Then 'This line checks that `Q3` is "Yes" For RowCnt = BeginRow To EndRow 'This line loops through the rows and hides the weekends If Cells(RowCnt, ChkCol).Interior.Color = RGB(253, 233, 217) Then Cells(RowCnt, ChkCol).EntireRow.Hidden = True End If Next RowCnt Else Rows.EntireRow.Hidden = False 'This line unhides all rows in the activesheet if `Q3` isn't "Yes" End If Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub 
Interesting Posts

Как установить максимальное значение на 5 в радарном графике в Excel, тогда как все значения меньше 4

Разрешить пользователю вставлять скриншот в пользовательскую форму vba

Vba для удаления всех строк, содержащих определенную текстовую строку, дающую ошибку несоответствия, а также скрипт транспонирования

как сравнить данные между двумя опорными точками и изменить цвет, если какое-либо несоответствие существует?

VB.NET – получение данных в Datatable из нескольких источников excel

Excel 2016 Генерировать идентификатор на основе текста

Мне нужно написать список записей из списка Row_Items в листе excel в столбце F (в разделе Incident coumn)

Использовать переменную типа xlPivotFilter

Модель данных в excel 2010 и 2013 // сбор данных

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

Ошибка времени выполнения 1004 при добавлении проверки данных

Excel работает с условием

Excel VB-Script – Как управлять длинным списком значений?

Скопируйте данные пасты, используя имена конкретных столбцов

Excel – Index Match, где максимальное значение (возвращает несколько результатов и удаляет дубликаты)

Давайте будем гением компьютера.