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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос скрытия/показа строк по условию ячеек - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос скрытия/показа строк по условию ячеек (Макросы/Sub)
Макрос скрытия/показа строк по условию ячеек
sIT Дата: Четверг, 08.06.2023, 19:42 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго времени!

Прошу помощи с кодом макроса.

Суть в целом проста - по щелчку Флажка скрывать Строки столбцов в ячейках которых "0" и при включении обратно возвращать:

[vba]
Код
Sub Флажок1_Щелчок()
Set target = Range("$I$1")
If target.Value = "ИСТИНА" Then
Dim cell As Range
Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения
For Each cell In ActiveSheet.UsedRange.Columns(1).Cells 'проходим по всем ячейкам первой строки
If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
Next
For Each cell In ActiveSheet.UsedRange.Columns(6).Cells 'проходим по всем ячейкам первой строки
If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
Next
For Each cell In ActiveSheet.UsedRange.Columns(7).Cells 'проходим по всем ячейкам первой строки
If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
Next
Application.ScreenUpdating = True
End If
If target.Value = "ЛОЖЬ" Then
Columns.Hidden = False 'отменяем все скрытия строк и столбцов
Rows.Hidden = False
End If
End Sub
[/vba]

На два отдельных Флажка оба макроса по отдельности работают (скрытие и показ).
Заранее спасибо за уделенное время!


горе умелец!
 
Ответить
СообщениеДоброго времени!

Прошу помощи с кодом макроса.

Суть в целом проста - по щелчку Флажка скрывать Строки столбцов в ячейках которых "0" и при включении обратно возвращать:

[vba]
Код
Sub Флажок1_Щелчок()
Set target = Range("$I$1")
If target.Value = "ИСТИНА" Then
Dim cell As Range
Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения
For Each cell In ActiveSheet.UsedRange.Columns(1).Cells 'проходим по всем ячейкам первой строки
If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
Next
For Each cell In ActiveSheet.UsedRange.Columns(6).Cells 'проходим по всем ячейкам первой строки
If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
Next
For Each cell In ActiveSheet.UsedRange.Columns(7).Cells 'проходим по всем ячейкам первой строки
If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
Next
Application.ScreenUpdating = True
End If
If target.Value = "ЛОЖЬ" Then
Columns.Hidden = False 'отменяем все скрытия строк и столбцов
Rows.Hidden = False
End If
End Sub
[/vba]

На два отдельных Флажка оба макроса по отдельности работают (скрытие и показ).
Заранее спасибо за уделенное время!

Автор - sIT
Дата добавления - 08.06.2023 в 19:42
Pelena Дата: Четверг, 08.06.2023, 20:52 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19179
Репутация: 4419 ±
Замечаний: ±

Excel 365 & Mac Excel
Файл с небольшим примером помог бы в понимании проблемы


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеФайл с небольшим примером помог бы в понимании проблемы

Автор - Pelena
Дата добавления - 08.06.2023 в 20:52
WowGun Дата: Четверг, 08.06.2023, 21:07 | Сообщение № 3
Группа: Проверенные
Ранг: Новичок
Сообщений: 27
Репутация: 3 ±
Замечаний: 0% ±

Вообще я не силен в разгадывании загадок, но ... попробую.
Есть ФЛАГ привязанный к ячейке "I1". Есть как минимум 7 строк с данными. Активируя ФЛАГ вы ищите в строках 1, 6 и 7 значения "0" и если находите, то скрываете этот столбец. И вроде как это РАБОТАЕТ.
Я не понял про "оба макроса" и про то, что вы хотите исправить.
 
Ответить
СообщениеВообще я не силен в разгадывании загадок, но ... попробую.
Есть ФЛАГ привязанный к ячейке "I1". Есть как минимум 7 строк с данными. Активируя ФЛАГ вы ищите в строках 1, 6 и 7 значения "0" и если находите, то скрываете этот столбец. И вроде как это РАБОТАЕТ.
Я не понял про "оба макроса" и про то, что вы хотите исправить.

Автор - WowGun
Дата добавления - 08.06.2023 в 21:07
i691198 Дата: Четверг, 08.06.2023, 21:54 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 218
Репутация: 85 ±
Замечаний: 0% ±

sIT, Есть вопросы.
1. Если речь идет об элементе управления Флажок и он связан с ячейкой I1, то клик на флажок будет в этой ячейке менять значение "ИСТИНА" на "ЛОЖЬ". Но это на листе, VBA эти значения не понимает, в коде это должны быть значения True и False (без кавычек). В вашем варианте макрос не будет работать.
2. В комментариях перепутаны понятия строки и столбцы. Например - "проходим по всем ячейкам первой строки" а в коде проходим по всем ячейкам первого столбца., "если в ячейке 0 - скрываем столбец", а в коде скрываем строку.


Сообщение отредактировал i691198 - Четверг, 08.06.2023, 21:56
 
Ответить
СообщениеsIT, Есть вопросы.
1. Если речь идет об элементе управления Флажок и он связан с ячейкой I1, то клик на флажок будет в этой ячейке менять значение "ИСТИНА" на "ЛОЖЬ". Но это на листе, VBA эти значения не понимает, в коде это должны быть значения True и False (без кавычек). В вашем варианте макрос не будет работать.
2. В комментариях перепутаны понятия строки и столбцы. Например - "проходим по всем ячейкам первой строки" а в коде проходим по всем ячейкам первого столбца., "если в ячейке 0 - скрываем столбец", а в коде скрываем строку.

Автор - i691198
Дата добавления - 08.06.2023 в 21:54
sIT Дата: Пятница, 09.06.2023, 10:17 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо всем кто откликнулся!
Не подумал сразу приложить пример.

Посмотрите "кнопки" - одна делает "0" в строках и скрывает, вторая просто возвращает строки, когда не "0".
Хотелось бы, что макрос работал в одной "кнопке".
К сообщению приложен файл: makros_skrytija_pokaza_strok_p.xlsm (24.4 Kb)


горе умелец!
 
Ответить
СообщениеСпасибо всем кто откликнулся!
Не подумал сразу приложить пример.

Посмотрите "кнопки" - одна делает "0" в строках и скрывает, вторая просто возвращает строки, когда не "0".
Хотелось бы, что макрос работал в одной "кнопке".

Автор - sIT
Дата добавления - 09.06.2023 в 10:17
WowGun Дата: Пятница, 09.06.2023, 11:06 | Сообщение № 6
Группа: Проверенные
Ранг: Новичок
Сообщений: 27
Репутация: 3 ±
Замечаний: 0% ±

Может так ...
[vba]
Код


Sub Hide0С()
    Dim cell As Range
    
    Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения
    
    If Not Range("I1") Then
    
    Columns.Hidden = False   'отменяем все скрытия строк и столбцов
    Rows.Hidden = False
    
    Else
    
    For Each cell In ActiveSheet.UsedRange.Columns(1).Cells 'проходим по всем ячейкам первой строки
    If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
    Next
    For Each cell In ActiveSheet.UsedRange.Columns(6).Cells 'проходим по всем ячейкам первой строки
    If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
    Next
    For Each cell In ActiveSheet.UsedRange.Columns(7).Cells 'проходим по всем ячейкам первой строки
    If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
    Next
    
    End If
    Application.ScreenUpdating = True
    End Sub
[/vba]
 
Ответить
СообщениеМожет так ...
[vba]
Код


Sub Hide0С()
    Dim cell As Range
    
    Application.ScreenUpdating = False 'отключаем обновление экрана для ускорения
    
    If Not Range("I1") Then
    
    Columns.Hidden = False   'отменяем все скрытия строк и столбцов
    Rows.Hidden = False
    
    Else
    
    For Each cell In ActiveSheet.UsedRange.Columns(1).Cells 'проходим по всем ячейкам первой строки
    If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
    Next
    For Each cell In ActiveSheet.UsedRange.Columns(6).Cells 'проходим по всем ячейкам первой строки
    If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
    Next
    For Each cell In ActiveSheet.UsedRange.Columns(7).Cells 'проходим по всем ячейкам первой строки
    If cell.Value = "0" Then cell.EntireRow.Hidden = True 'если в ячейке 0 - скрываем столбец
    Next
    
    End If
    Application.ScreenUpdating = True
    End Sub
[/vba]

Автор - WowGun
Дата добавления - 09.06.2023 в 11:06
sIT Дата: Пятница, 09.06.2023, 15:25 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Может так ...


Очень благодарен! Спасибо, понял. Учусь yes


горе умелец!
 
Ответить
Сообщение
Может так ...


Очень благодарен! Спасибо, понял. Учусь yes

Автор - sIT
Дата добавления - 09.06.2023 в 15:25
i691198 Дата: Суббота, 10.06.2023, 15:45 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 218
Репутация: 85 ±
Замечаний: 0% ±

sIT, Флажки удобно применять, когда их несколько на листе или в VBA форме. Для вашего задания больше подходит кнопка-триггер. Посмотрите такой вариант.
К сообщению приложен файл: hide_rows.xlsm (22.4 Kb)
 
Ответить
СообщениеsIT, Флажки удобно применять, когда их несколько на листе или в VBA форме. Для вашего задания больше подходит кнопка-триггер. Посмотрите такой вариант.

Автор - i691198
Дата добавления - 10.06.2023 в 15:45
sIT Дата: Понедельник, 12.06.2023, 04:20 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Посмотрите такой вариант


Очень элегантное решение, благодарю за просвещение!
Спасибо.


горе умелец!
 
Ответить
Сообщение
Посмотрите такой вариант


Очень элегантное решение, благодарю за просвещение!
Спасибо.

Автор - sIT
Дата добавления - 12.06.2023 в 04:20
RAN Дата: Вторник, 13.06.2023, 13:49 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Выделить любую ячейку внутри раздела и нажать кнопку
[vba]
Код
Sub qq()
    Dim aRow&, stRow&, eRow&
    aRow = ActiveCell.Row
    stRow = aRow
    eRow = aRow
    Do While InStr(Cells(stRow, 1), "Раздел") <> 1
        If InStr(Cells(stRow, 1), "Итого") = 1 Then Exit Sub
        stRow = stRow - 1
        If stRow < 1 Then Exit Sub
        DoEvents
    Loop
    Do While InStr(Cells(eRow, 1), "Итого") <> 1
        If eRow = Cells(Rows.Count, 1).End(xlUp).Row Then Exit Do
        eRow = eRow + 1
        DoEvents
    Loop
    Rows(stRow & ":" & eRow).Hidden = True
End Sub
[/vba]
К сообщению приложен файл: 7316731.xlsm (24.7 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВыделить любую ячейку внутри раздела и нажать кнопку
[vba]
Код
Sub qq()
    Dim aRow&, stRow&, eRow&
    aRow = ActiveCell.Row
    stRow = aRow
    eRow = aRow
    Do While InStr(Cells(stRow, 1), "Раздел") <> 1
        If InStr(Cells(stRow, 1), "Итого") = 1 Then Exit Sub
        stRow = stRow - 1
        If stRow < 1 Then Exit Sub
        DoEvents
    Loop
    Do While InStr(Cells(eRow, 1), "Итого") <> 1
        If eRow = Cells(Rows.Count, 1).End(xlUp).Row Then Exit Do
        eRow = eRow + 1
        DoEvents
    Loop
    Rows(stRow & ":" & eRow).Hidden = True
End Sub
[/vba]

Автор - RAN
Дата добавления - 13.06.2023 в 13:49
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос скрытия/показа строк по условию ячеек (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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