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

Вход

Регистрация

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

 

= Мир MS Excel/Скрытие строк таблицы по условию - Мир MS Excel

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

Excel 2016
Здравствуйте!
Есть таблица исходных данных (см. вложение), в которой в зависимости от значения Схемы котельной (строка 8) необходимо скрыть строки с данными, которые не будут использоваться при дальнейших расчетах.
В VBA только начинаю разбираться и познаний хватило только на то, что есть во вложении. Такой вариант в принципе работает, но есть проблема: при вставке новой строки (таблица периодически редактируется) в коде приходится изменять все номера скрываемых строк... Можно как-то еще скрывать строки, чтобы не менять код при добавлении строк в таблицу?
К сообщению приложен файл: 123.xls (62.0 Kb)
 
Ответить
СообщениеЗдравствуйте!
Есть таблица исходных данных (см. вложение), в которой в зависимости от значения Схемы котельной (строка 8) необходимо скрыть строки с данными, которые не будут использоваться при дальнейших расчетах.
В VBA только начинаю разбираться и познаний хватило только на то, что есть во вложении. Такой вариант в принципе работает, но есть проблема: при вставке новой строки (таблица периодически редактируется) в коде приходится изменять все номера скрываемых строк... Можно как-то еще скрывать строки, чтобы не менять код при добавлении строк в таблицу?

Автор - PurpleMan
Дата добавления - 17.09.2015 в 11:48
Pelena Дата: Четверг, 17.09.2015, 12:44 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19187
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Поиск по форуму по словам Скрыть строки по условию дал 106 результатов. Ни один не подошёл?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПоиск по форуму по словам Скрыть строки по условию дал 106 результатов. Ни один не подошёл?

Автор - Pelena
Дата добавления - 17.09.2015 в 12:44
PurpleMan Дата: Четверг, 17.09.2015, 20:13 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Pelena, просмотрел после Вашего сообщения темы из поиска, но, к сожалению, ничего что я смог бы переделать под себя я не нашел (практически ничего не понимаю)... Но справиться с задачей все же получилось :) С помощью формул промаркировал строки (те которые надо скрыть - 1, которые не надо - 0), и потом скрыл строки с помощью не хитрого макроса
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Integer
For a = 1 To 50
     If Cells(a, 1).Value = 1 Then
         Rows(a).Hidden = True
         Else
         Rows(a).Hidden = False
     End If
Next a
End Sub
[/vba]

Спасибо! :)
К сообщению приложен файл: 2385235.xls (54.5 Kb)
 
Ответить
СообщениеPelena, просмотрел после Вашего сообщения темы из поиска, но, к сожалению, ничего что я смог бы переделать под себя я не нашел (практически ничего не понимаю)... Но справиться с задачей все же получилось :) С помощью формул промаркировал строки (те которые надо скрыть - 1, которые не надо - 0), и потом скрыл строки с помощью не хитрого макроса
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Integer
For a = 1 To 50
     If Cells(a, 1).Value = 1 Then
         Rows(a).Hidden = True
         Else
         Rows(a).Hidden = False
     End If
Next a
End Sub
[/vba]

Спасибо! :)

Автор - PurpleMan
Дата добавления - 17.09.2015 в 20:13
PurpleMan Дата: Пятница, 18.09.2015, 11:00 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Мажет кому пригодится...
При увеличении диапазона цикла For с 50 до 300 обнаружилось значительное замедление работы макроса.
Поискав другие решения, нашел следующее:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng, out, out1, i, one, zero
Dim Col
Set rng = Range(Cells(1, 1), Cells(300, 1))
Col = rng
one = True
zero = True

With rng.Cells(1, 1)
     For Each v In Col
     i = i + 1
         If v = 1 Then
             If one Then
             Set out = .Offset(i - 1)
             one = False
             Else
             Set out = Union(out, .Offset(i - 1))
             End If
         End If
         If v = 0 Then
             If zero Then
             Set out1 = .Offset(i - 1)
             zero = False
             Else
             Set out1 = Union(out1, .Offset(i - 1))
             End If
         End If
     Next
End With

End Sub
[/vba]

Макрос отрабатывает практически мгновенно.
 
Ответить
СообщениеМажет кому пригодится...
При увеличении диапазона цикла For с 50 до 300 обнаружилось значительное замедление работы макроса.
Поискав другие решения, нашел следующее:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng, out, out1, i, one, zero
Dim Col
Set rng = Range(Cells(1, 1), Cells(300, 1))
Col = rng
one = True
zero = True

With rng.Cells(1, 1)
     For Each v In Col
     i = i + 1
         If v = 1 Then
             If one Then
             Set out = .Offset(i - 1)
             one = False
             Else
             Set out = Union(out, .Offset(i - 1))
             End If
         End If
         If v = 0 Then
             If zero Then
             Set out1 = .Offset(i - 1)
             zero = False
             Else
             Set out1 = Union(out1, .Offset(i - 1))
             End If
         End If
     Next
End With

End Sub
[/vba]

Макрос отрабатывает практически мгновенно.

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

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