Страницы: 1
RSS
Функция для скрытия строк с пустыми ячейками
 
Привет всем! Нашел в интернете функцию для скрытия строк с пустыми ячейками
Код
Sub тест()
Dim cell As Range: Application.ScreenUpdating = False
For Each cell In [L21:L1000].Cells
If cell.Find("*", , xlValues, xlPart) Is Nothing Then
cell.EntireRow.Hidden = True
End If
Next cell
End Sub
Функция очень долго работает, т.к. много обрабатываемых ячеек.
На странице создал ячейку А13 с подсчетом заполненных ячеек, как ее вставить с таким смыслом [L21:L(A13)].Cells??
 
прошу прощения за невнятность, немного не трезв)) в общем нужно каким-то образом вставить в строку For Each cell In [L21:L1000].Cells вместо L1000 значение ячейки А13 (она у меня считает кол-во заполненных строк в таблице). Итого функция будет обрабатывать только заполненную таблицу а не все 1000 строк. Вот.
 
Считает количество строк - а хотите анализировать ячейки.
Т.е. если будет заполнено 2 строки, то будете анализировать 2 ячейки?
Хотя ладно, можно и так...

Код
For Each cell In Range("L21:L" & [a13]).Cells
Изменено: Hugo - 06.01.2013 22:33:40
 
Код
For Each cell In [L21].resize([a13].value).Cells 


ps не понял - а зачем тут Find?
pps по хорошему, надо весь макрос переписать
Изменено: ikki - 06.01.2013 22:34:18
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Hugo, а13 считает количество заполненных ячеек и выдает значение в Вашем случае - цифра 2
For Each cell In [L21:L(21+A13)].Cells, получается так For Each cell In [L21:L23].Cells, т.е. проверяются только ячейки таблицы, возможно такое?
Изменено: Женя Юрсин - 25.05.2013 13:37:58
 
Код
Sub тест() 
Dim cell As Range: Application.ScreenUpdating = False 
For Each cell In Range("L21:L" & Cells(Rows.Count, "L").End(xlUp).row).Cells 
If cell.Find("*", , xlValues, xlPart) Is Nothing Then 
    cell.EntireRow.Hidden = True 
End If 
Next cell
Application.ScreenUpdating = 1
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
вот так должно быть побыстрее:
Код
Sub тест() 
  Dim cell As Range, r As Range
  Application.ScreenUpdating = False 
  For Each cell In [L21].resize([A13].Value).Cells 
    If cell.Find("*", , xlValues, xlPart) Is Nothing Then 
      If r Is Nothing Then Set r=cell Else Set r=Union(r,cell) 
    End If 
  Next cell
  r.EntireRow.Hidden=True
End Sub
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
ошибку выдает в строке For Each cell In [L21].resize([A13].Value).Cells
 
вы квадратик убрали перед Value?
это временный глюк форума.
должна быть точка, а за ней - Value
ну и в яч. A13 у вас должно быть положительное число.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Цитата
ikki пишет: For Each cell In [L21].resize([A13].Value).Cells
все заработало!! спасибо большое!!
Изменено: Женя Юрсин - 27.05.2014 16:16:27
 
файл
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
А как будет выглядеть макрос, если нужно скрыть например строки 2,4,9, при пустой ячейки А5?
И сделать его работу автоматической (отображение строк, если ячейка не пустая и скрытие строк, если ячейка пустая), при внесении изменений на листе?
Изменено: Михаил Киселев - 24.05.2013 10:40:13
 
На форуме нашёл ещё такой пример:
http://planetaexcel.ru/?PAGE_NAME=message&FID=8&TID=29421&MID=257615#message257615
но он работает, если непосредственно в ячейке вносить изменения, а нужно, если в ячейке меняется значение, например по ссылке из другой ячейки, то скрываются строки.
Ещё ни один пример не работает при копирование в книгу с выпадающим календарём, созданный в UserForm.
 
Михаил Киселев,
1. Вы по своей ссылке пробовали перейти?
2. Календарь здесь (в этой теме) причём?
 
Цитата
Михаил Киселев пишет: нужно, если в ячейке меняется значение, например по ссылке из другой ячейк
- обрабатывайте событие изменения ячейки по ссылке, ну или событие пересчёта с анализом значения (что дольше, т.к. будет отрабатывать на любой пересчёт).
Или как вариант - невидимый текстбокс, завязанный на эту ячейку, и его событие.
 
Цитата
1. Вы по своей ссылке пробовали перейти?
2. Календарь здесь (в этой теме) причём?
1. Да, не работает, т.к. из архива форума. Сори
2. С календарём маху дал. Сори
Изменено: Михаил Киселев - 27.05.2013 09:03:05
 
Не подскажете, что поменять, в макросе, чтобы вместо ячейки А5, была ячейка с другого листа? Можно ли както через присвоенное имя ячейки
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A5") Is Nothing Then Exit Sub
Application.EnableEvents = False
If [A5] = "" Then
 [13:13].EntireRow.Hidden = True
 [15:15].EntireRow.Hidden = True
Else
[13:13].EntireRow.Hidden = False
[15:15].EntireRow.Hidden = False
End If
Application.EnableEvents = True
End Sub
Изменено: Михаил Киселев - 27.05.2014 16:16:46
 
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "Лист3" Then Exit Sub '"Лист3" - другой лист
If Intersect(Target, Range("B5")) Is Nothing Then Exit Sub '"B5" - другая ячейка
Application.EnableEvents = False
With Sheets("Лист1") 'Лист на котором скрываем-отображаем строки
.Rows(13).EntireRow.Hidden = IsEmpty(Target)
.Rows(15).EntireRow.Hidden = IsEmpty(Target)
End With
Application.EnableEvents = True
End Sub
Изменено: k61 - 27.05.2013 05:34:47
 
Что то, у меня не хочет работать, пожалуйста посмотрите, что не так?
 
На каком листе и какую ячейку проверяем для скрытия-отображения строк (каких на другом листе?) .
 
На лист1 проверяем ячейку А5, для скрытия при условии, если ячейка А5 лист1 пустая скрываем строки на лист2 5-ю, 7-ю 10-ю и 12-ю. Если не пустая, то все строки на лист2 отображаем.
 
???
 
Увидел у себя ошибку, макрос та надо было вставлять в книгу, а не лист))).
 
Михаил Киселев, это дурная привычка: перед ответом полностью повторять сказанное собеседником.
 
Ок vikttur, постараюсь не повторять.
 
k61, большое спасибо за помощь!
Пока дорабатывал свой рабочий файл, столкнулся с проблемой, что в эту же книгу, необходимо добавить такой же макрос, только если другая ячейка пустая, то другие строки скрываются.
Пробую через End if, не работает.
 
Цитата
..... если другая ячейка пустая, то другие строки скрываются.
Пробую через End if, не работает.
На каком листе и какую другую ячейку проверяем для скрытия-отображения других строк .
 
на Лист1, ячейка А4 - проверяем. На Лист2, скрываем 15 и 17 строки.
 
Всем спасибо за помощь!
Сэкономил на фрилансерах, будь они неладно )))
 
Михаил Киселев, здесь многие в свободное от бескорыстной помощи время - фрилансеры :)
Страницы: 1
Наверх