Суть в целом проста - по щелчку Флажка скрывать Строки столбцов в ячейках которых "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
Вообще я не силен в разгадывании загадок, но ... попробую. Есть ФЛАГ привязанный к ячейке "I1". Есть как минимум 7 строк с данными. Активируя ФЛАГ вы ищите в строках 1, 6 и 7 значения "0" и если находите, то скрываете этот столбец. И вроде как это РАБОТАЕТ. Я не понял про "оба макроса" и про то, что вы хотите исправить.
Вообще я не силен в разгадывании загадок, но ... попробую. Есть ФЛАГ привязанный к ячейке "I1". Есть как минимум 7 строк с данными. Активируя ФЛАГ вы ищите в строках 1, 6 и 7 значения "0" и если находите, то скрываете этот столбец. И вроде как это РАБОТАЕТ. Я не понял про "оба макроса" и про то, что вы хотите исправить.WowGun
sIT, Есть вопросы. 1. Если речь идет об элементе управления Флажок и он связан с ячейкой I1, то клик на флажок будет в этой ячейке менять значение "ИСТИНА" на "ЛОЖЬ". Но это на листе, VBA эти значения не понимает, в коде это должны быть значения True и False (без кавычек). В вашем варианте макрос не будет работать. 2. В комментариях перепутаны понятия строки и столбцы. Например - "проходим по всем ячейкам первой строки" а в коде проходим по всем ячейкам первого столбца., "если в ячейке 0 - скрываем столбец", а в коде скрываем строку.
sIT, Есть вопросы. 1. Если речь идет об элементе управления Флажок и он связан с ячейкой I1, то клик на флажок будет в этой ячейке менять значение "ИСТИНА" на "ЛОЖЬ". Но это на листе, VBA эти значения не понимает, в коде это должны быть значения True и False (без кавычек). В вашем варианте макрос не будет работать. 2. В комментариях перепутаны понятия строки и столбцы. Например - "проходим по всем ячейкам первой строки" а в коде проходим по всем ячейкам первого столбца., "если в ячейке 0 - скрываем столбец", а в коде скрываем строку.i691198
Сообщение отредактировал i691198 - Четверг, 08.06.2023, 21:56
Спасибо всем кто откликнулся! Не подумал сразу приложить пример.
Посмотрите "кнопки" - одна делает "0" в строках и скрывает, вторая просто возвращает строки, когда не "0". Хотелось бы, что макрос работал в одной "кнопке".
Спасибо всем кто откликнулся! Не подумал сразу приложить пример.
Посмотрите "кнопки" - одна делает "0" в строках и скрывает, вторая просто возвращает строки, когда не "0". Хотелось бы, что макрос работал в одной "кнопке".sIT
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
sIT, Флажки удобно применять, когда их несколько на листе или в VBA форме. Для вашего задания больше подходит кнопка-триггер. Посмотрите такой вариант.
sIT, Флажки удобно применять, когда их несколько на листе или в VBA форме. Для вашего задания больше подходит кнопка-триггер. Посмотрите такой вариант.i691198
Выделить любую ячейку внутри раздела и нажать кнопку [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]
Выделить любую ячейку внутри раздела и нажать кнопку [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