Уважаемые форумчане, добрый день!
Мучаюсь второй день, не могу реализовать задачу.
Макрос на кнопке «Скрыть пустые» скрывает все строки, начиная с 30 строки и до конца таблицы по при условии пустых ячеек в определенных столбцах
Код |
---|
Sub СкрытьПустые()
Dim i&
Application.ScreenUpdating = False
For i = 30 To Cells(Rows.Count, 1).End(xlUp).Row 'Определяем что скрытие пустых строк начнется с 30 строки
'Далее определяем какие диапазоны столбцов мы отслеживаем, если во всех указанных диапазонах пусто, то идет скрытие строки
If WorksheetFunction.CountA(Range("D" & i & ":H" & i)) = 0 _
And WorksheetFunction.CountA(Range("J" & i & ":J" & i)) = 0 _
And WorksheetFunction.CountA(Range("L" & i & ":L" & i)) = 0 _
And WorksheetFunction.CountA(Range("N" & i & ":P" & i)) = 0 _
And WorksheetFunction.CountA(Range("R" & i & ":R" & i)) = 0 _
And WorksheetFunction.CountA(Range("T" & i & ":V" & i)) = 0 _
And WorksheetFunction.CountA(Range("X" & i & ":Y" & i)) = 0 _
And WorksheetFunction.CountA(Range("AA" & i & ":AA" & i)) = 0 Then
Rows(i).EntireRow.Hidden = True
End If
Next
Application.ScreenUpdating = True
End Sub
|
Кнопка «Отобразить все» возвращает все обратно.
Код |
---|
Sub ОтобразитьПустые()
Rows("30:9999").Hidden = False 'Показать скрытые строки в диапазоне
End Sub
|
При заполнении данными макрос выполняется очень
долго (несколько минут). Решил облегчить задачу и выполнять скрытие строк
только в указанном через форму диапазоне по выбору пользователя – кнопка «Скрыть
пустые строки диапазона»
Код |
---|
Sub СкрытьПустыеДиапазона2()
Dim i1 As Long, i2 As Long
Application.ScreenUpdating = False
i1 = Selection.Cells(1).Row 'Определяем переменную i1 - первая строка выделенного диапазона
i2 = Selection.Cells(Selection.Cells.Count).Row 'Определяем переменную i2 - последняя строка выделенного диапазона
Rows(i1).Resize(i2 - i1 + 1).Hidden = True 'Скрываются строки в диапазоне. Почему так не понятно. Rows("i1:i2") не работает
Application.ScreenUpdating = True
End Sub
|
Скрытие строк работает, но только внедрить условия (объединить эти два кода) не получается
Пробовал так
Код |
---|
Sub СкрытьПустыеДиапазона2()
Dim i1 As Long, i2 As Long
Application.ScreenUpdating = False
' For i = 7 To Cells(Rows.Count, 1).End(xlUp).Row 'Определяем что скрытие пустых строк начнется с 7 строки
i1 = Selection.Cells(1).Row 'Определяем переменную i1 - первая строка выделенного диапазона
i2 = Selection.Cells(Selection.Cells.Count).Row 'Определяем переменную i2 - последняя строка выделенного диапазона
If WorksheetFunction.CountA(Range("D" & i & ":H" & i)) = 0 _
And WorksheetFunction.CountA(Range("J" & i & ":J" & i)) = 0 _
And WorksheetFunction.CountA(Range("L" & i & ":L" & i)) = 0 _
And WorksheetFunction.CountA(Range("N" & i & ":P" & i)) = 0 _
And WorksheetFunction.CountA(Range("R" & i & ":R" & i)) = 0 _
And WorksheetFunction.CountA(Range("T" & i & ":V" & i)) = 0 _
And WorksheetFunction.CountA(Range("X" & i & ":Y" & i)) = 0 _
And WorksheetFunction.CountA(Range("AA" & i & ":AA" & i)) = 0 Then
Rows(i1).Resize(i2 - i1 + 1).Hidden = True 'Скрываются строки в диапазоне.
End If
' Next
Application.ScreenUpdating = True
End Sub
|
не работает.
Прошу помочь с решением данной проблемы.
Если можно подскажите еще пожалуйста как можно заменить названия столбцов на "Поименованный диапазон" (столбцы часто меняются и приходится каждый раз править код)
Заранее спасибо.