Я нашел макрос и подстроил немного под себя, который скрывает строки если есть нулевые значения ячеек в выделенном диапазоне. Код выглядит так: [vba]
Код
Sub OpenRowsByZero() 'Update 20131107 Dim Rng As Range Dim WorkRng As Range On Error Resume Next xTitleId = "KutoolsforExcel" Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) For Each Rng In WorkRng If Rng.Value = "0" Then Rng.EntireRow.Hidden = Ture End If Next End Sub
[/vba]
Соответственно меняя True на False открываю этот диапазон. Использую этот макрос для автоматизации соответственно, так как много нулевых ячеей в таблице появляется, а группировать напряжно все. Но проблема в том что он очень долго скрывает ячейки, делает каждую поочередно и на одну он тратит там меньше чем пол секунды, соответственно если у меня 700 позиций, то он будет скрывать их несколько минут, ну и подвисает из-за этого сам эксель. Есть ли более простой способ это сделать? Или как то ускорить процесс обработки ячеек макросом? Заранее спасибо!
Всем привет!
Я нашел макрос и подстроил немного под себя, который скрывает строки если есть нулевые значения ячеек в выделенном диапазоне. Код выглядит так: [vba]
Код
Sub OpenRowsByZero() 'Update 20131107 Dim Rng As Range Dim WorkRng As Range On Error Resume Next xTitleId = "KutoolsforExcel" Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) For Each Rng In WorkRng If Rng.Value = "0" Then Rng.EntireRow.Hidden = Ture End If Next End Sub
[/vba]
Соответственно меняя True на False открываю этот диапазон. Использую этот макрос для автоматизации соответственно, так как много нулевых ячеей в таблице появляется, а группировать напряжно все. Но проблема в том что он очень долго скрывает ячейки, делает каждую поочередно и на одну он тратит там меньше чем пол секунды, соответственно если у меня 700 позиций, то он будет скрывать их несколько минут, ну и подвисает из-за этого сам эксель. Есть ли более простой способ это сделать? Или как то ускорить процесс обработки ячеек макросом? Заранее спасибо! Screamer08
Sub OpenRowsByZero() Dim rHide As Range, xTitleId As String, Rng As Range, WorkRng As Range xTitleId = "KutoolsforExcel" On Error Resume Next Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) Set rHide = WorkRng(1, WorkRng.Columns.Count + 1) For Each Rng In WorkRng If Rng.Value = 0 Then 'или все-таки "0" Set rHide = Union(rHide, Rng) End If Next If rHide.Count > 1 Then Intersect(rHide, WorkRng).EntireRow.Hidden = True End Sub
[/vba]
можно попробовать так [vba]
Код
Sub OpenRowsByZero() Dim rHide As Range, xTitleId As String, Rng As Range, WorkRng As Range xTitleId = "KutoolsforExcel" On Error Resume Next Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) Set rHide = WorkRng(1, WorkRng.Columns.Count + 1) For Each Rng In WorkRng If Rng.Value = 0 Then 'или все-таки "0" Set rHide = Union(rHide, Rng) End If Next If rHide.Count > 1 Then Intersect(rHide, WorkRng).EntireRow.Hidden = True End Sub
Спасибо! Действительно работает, делает теперь ощутимо быстрее ну и без прорисовки. В принципе это подойдет вообще! Но все равно немного торможение есть. Хотелось бы узнать может есть еще какой-нибудь способ? И заметил еще, делаю так как Вы написали, но у меня не включается обновление экрана. Вставляю значение с True в конец, все как написано. В чем подвох? И как теперь заново включить обновление страницы, так как когда значения формулы, не меняются значения в зависящих ячейках, только после выделения их в формуле?
можно попробовать так Sub OpenRowsByZero() Dim rHide As Range, xTitleId As String, Rng As Range, WorkRng As Range xTitleId = "KutoolsforExcel" On Error Resume Next Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) Set rHide = WorkRng(1, WorkRng.Columns.Count + 1) For Each Rng In WorkRng If Rng.Value = 0 Then 'или все-таки "0" Set rHide = Union(rHide, Rng) End If Next If rHide.Count > 1 Then Intersect(rHide, WorkRng).EntireRow.Hidden = True End Sub
Ваш почему-то не заработал, просто молчит при использовании, ну подгружается но без изменений все. Ваш заработал, все круто! Но теперь вопрос, как открывать скрывшиеся ячейки? А то сам не могу въехать! Уже разобрался Все заработало довольно круто, очень быстро скрывает, пару секунд где-то
Когда-то просто видел макрос в примере что делал такую же функцию, но не смог адаптировать под себя, так как не силен в VBA, так там задача выполнялась мгновенно. Было бы круто какие-то обходные варианты посмотреть!
Спасибо! Действительно работает, делает теперь ощутимо быстрее ну и без прорисовки. В принципе это подойдет вообще! Но все равно немного торможение есть. Хотелось бы узнать может есть еще какой-нибудь способ? И заметил еще, делаю так как Вы написали, но у меня не включается обновление экрана. Вставляю значение с True в конец, все как написано. В чем подвох? И как теперь заново включить обновление страницы, так как когда значения формулы, не меняются значения в зависящих ячейках, только после выделения их в формуле?
можно попробовать так Sub OpenRowsByZero() Dim rHide As Range, xTitleId As String, Rng As Range, WorkRng As Range xTitleId = "KutoolsforExcel" On Error Resume Next Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) Set rHide = WorkRng(1, WorkRng.Columns.Count + 1) For Each Rng In WorkRng If Rng.Value = 0 Then 'или все-таки "0" Set rHide = Union(rHide, Rng) End If Next If rHide.Count > 1 Then Intersect(rHide, WorkRng).EntireRow.Hidden = True End Sub
Ваш почему-то не заработал, просто молчит при использовании, ну подгружается но без изменений все. Ваш заработал, все круто! Но теперь вопрос, как открывать скрывшиеся ячейки? А то сам не могу въехать! Уже разобрался Все заработало довольно круто, очень быстро скрывает, пару секунд где-то
Когда-то просто видел макрос в примере что делал такую же функцию, но не смог адаптировать под себя, так как не силен в VBA, так там задача выполнялась мгновенно. Было бы круто какие-то обходные варианты посмотреть!