Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Скрытие пустых строк в диапазоне - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Скрытие пустых строк в диапазоне
SSre Дата: Суббота, 22.05.2021, 22:47 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 2 ±
Замечаний: 0% ±

Здравствуйте!
Необходим макрос, который будет проверять определенный диапазон ячеек и скрывать пустые строки если в них нет данных.
В соседней теме был предложен код, скрывающий строки по условию определенного столбца. Меня интересует именно условие диапазона.
Приложил файл. Для примера, диапазон B2:E4, т.е. должна быть скрыта только строка 5 т.к. она пустая.
[vba]
Код
Private Sub CommandButton1_Click()
    Dim i&
    Application.ScreenUpdating = False
    For i = 8 To Cells(Rows.Count, 3).End(xlUp).Row
        If Range("I" & i).Value = "" And Range("J" & i).Value = "" And Range("K" & i).Value = "" Then
            Rows(i).EntireRow.Hidden = True
        End If
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: RowHide.xlsx (8.7 Kb)
 
Ответить
СообщениеЗдравствуйте!
Необходим макрос, который будет проверять определенный диапазон ячеек и скрывать пустые строки если в них нет данных.
В соседней теме был предложен код, скрывающий строки по условию определенного столбца. Меня интересует именно условие диапазона.
Приложил файл. Для примера, диапазон B2:E4, т.е. должна быть скрыта только строка 5 т.к. она пустая.
[vba]
Код
Private Sub CommandButton1_Click()
    Dim i&
    Application.ScreenUpdating = False
    For i = 8 To Cells(Rows.Count, 3).End(xlUp).Row
        If Range("I" & i).Value = "" And Range("J" & i).Value = "" And Range("K" & i).Value = "" Then
            Rows(i).EntireRow.Hidden = True
        End If
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - SSre
Дата добавления - 22.05.2021 в 22:47
Kuzmich Дата: Суббота, 22.05.2021, 23:24 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
Private Sub CommandButton1_Click()
Dim i&
  Application.ScreenUpdating = False
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
      If WorksheetFunction.CountA(Range("B" & i & ":E" & i)) = 0 Then
         Rows(i).EntireRow.Hidden = True
      End If
    Next
  Application.ScreenUpdating = True
End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Private Sub CommandButton1_Click()
Dim i&
  Application.ScreenUpdating = False
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
      If WorksheetFunction.CountA(Range("B" & i & ":E" & i)) = 0 Then
         Rows(i).EntireRow.Hidden = True
      End If
    Next
  Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 22.05.2021 в 23:24
SSre Дата: Воскресенье, 23.05.2021, 14:02 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 2 ±
Замечаний: 0% ±

Kuzmich

Спасибо!
 
Ответить
Сообщение
Kuzmich

Спасибо!

Автор - SSre
Дата добавления - 23.05.2021 в 14:02
Александр7034 Дата: Четверг, 23.03.2023, 15:05 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 40% ±

Подскажите, схожая задача. Но строк будет под 500.
Проверить нужно диапазон A10:B500. так как в строках прописано правила условного форматирования и еще формулы, то вышеподсказаный код очень долго исполняется, секунд 30 пока все пустые скроет проходит. Есть способ быстрее скрыть? Строки с записью идут последовательно, если последняя запись будет на 200 строке, то с 201 по 500 строки будут пустыми.


Сообщение отредактировал Александр7034 - Четверг, 23.03.2023, 15:48
 
Ответить
СообщениеПодскажите, схожая задача. Но строк будет под 500.
Проверить нужно диапазон A10:B500. так как в строках прописано правила условного форматирования и еще формулы, то вышеподсказаный код очень долго исполняется, секунд 30 пока все пустые скроет проходит. Есть способ быстрее скрыть? Строки с записью идут последовательно, если последняя запись будет на 200 строке, то с 201 по 500 строки будут пустыми.

Автор - Александр7034
Дата добавления - 23.03.2023 в 15:05
_Boroda_ Дата: Четверг, 23.03.2023, 15:44 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Поскольку файла Вашего нет, приходится догадываться
[vba]
Код
Sub tt()
    Application.ScreenUpdating = 0
    Application.Calculation = 3
    r0_ = 10
    Rows(r0_).Resize(Rows.Count - r0_).EntireRow.Hidden = 0
    '===
    r10_ = Cells(Rows.Count, 1).End(3).Row
    r11_ = Cells(Rows.Count, 2).End(3).Row
    If r10_ > r11_ Then
        r1_ = r10_
    Else
        r1_ = r11_
    End If
    '===
    ' Или просто
    'r1_=500
    '===
    nr_ = r1_ - r0_ + 1
    ar_ = Cells(r0_, 1).Resize(nr_, 2).Value
    For i = 1 To nr_
        If ar_(i, 1) = "" Then
            If ar_(i, 2) = "" Then
                Exit For
            End If
        End If
    Next i
    Rows(r0_ + i - 1).Resize(nr_ - i + 1).EntireRow.Hidden = True
    Application.Calculation = 1
    Application.ScreenUpdating = 1
End Sub

[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПоскольку файла Вашего нет, приходится догадываться
[vba]
Код
Sub tt()
    Application.ScreenUpdating = 0
    Application.Calculation = 3
    r0_ = 10
    Rows(r0_).Resize(Rows.Count - r0_).EntireRow.Hidden = 0
    '===
    r10_ = Cells(Rows.Count, 1).End(3).Row
    r11_ = Cells(Rows.Count, 2).End(3).Row
    If r10_ > r11_ Then
        r1_ = r10_
    Else
        r1_ = r11_
    End If
    '===
    ' Или просто
    'r1_=500
    '===
    nr_ = r1_ - r0_ + 1
    ar_ = Cells(r0_, 1).Resize(nr_, 2).Value
    For i = 1 To nr_
        If ar_(i, 1) = "" Then
            If ar_(i, 2) = "" Then
                Exit For
            End If
        End If
    Next i
    Rows(r0_ + i - 1).Resize(nr_ - i + 1).EntireRow.Hidden = True
    Application.Calculation = 1
    Application.ScreenUpdating = 1
End Sub

[/vba]

Автор - _Boroda_
Дата добавления - 23.03.2023 в 15:44
Александр7034 Дата: Четверг, 23.03.2023, 16:10 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 40% ±

Поскольку файла Вашего нет, приходится догадываться

Ваша интуиция не подвела и код сработал в моем файле и скрытие быстро происходит. Спасибо за подсказку, использовал r1_=500, так как нужно было четко ограничивать до какой строки можно скрывать. Но тут мой косяк вышел, начал проверять на практике с готовыми данными (эти строки копируются с другого файла), а среди массива данных оказываются все же попадаются пустые строки. Соответственно после первой же строки где ячейки в столбце "A" и "B" пустые, все остальное дальше скрывается.
 
Ответить
Сообщение
Поскольку файла Вашего нет, приходится догадываться

Ваша интуиция не подвела и код сработал в моем файле и скрытие быстро происходит. Спасибо за подсказку, использовал r1_=500, так как нужно было четко ограничивать до какой строки можно скрывать. Но тут мой косяк вышел, начал проверять на практике с готовыми данными (эти строки копируются с другого файла), а среди массива данных оказываются все же попадаются пустые строки. Соответственно после первой же строки где ячейки в столбце "A" и "B" пустые, все остальное дальше скрывается.

Автор - Александр7034
Дата добавления - 23.03.2023 в 16:10
_Boroda_ Дата: Четверг, 23.03.2023, 17:11 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Тогда цикл снизу вверх
[vba]
Код
Sub tt()
    Application.ScreenUpdating = 0
    Application.Calculation = 3
    r0_ = 10
    r1_ = 500
    nr_ = r1_ - r0_ + 1
    Rows(r0_).Resize(nr_).EntireRow.Hidden = 0
    ar_ = Cells(r0_, 1).Resize(nr_, 2).Value
    For i = nr_ To 1 Step -1
        If ar_(i, 1) <> "" Then
            Exit For
        Else
            If ar_(i, 2) <> "" Then
                Exit For
            End If
        End If
    Next i
    Rows(r0_ + i).Resize(nr_ - i).EntireRow.Hidden = True
    Application.Calculation = 1
    Application.ScreenUpdating = 1
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТогда цикл снизу вверх
[vba]
Код
Sub tt()
    Application.ScreenUpdating = 0
    Application.Calculation = 3
    r0_ = 10
    r1_ = 500
    nr_ = r1_ - r0_ + 1
    Rows(r0_).Resize(nr_).EntireRow.Hidden = 0
    ar_ = Cells(r0_, 1).Resize(nr_, 2).Value
    For i = nr_ To 1 Step -1
        If ar_(i, 1) <> "" Then
            Exit For
        Else
            If ar_(i, 2) <> "" Then
                Exit For
            End If
        End If
    Next i
    Rows(r0_ + i).Resize(nr_ - i).EntireRow.Hidden = True
    Application.Calculation = 1
    Application.ScreenUpdating = 1
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 23.03.2023 в 17:11
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!