Отобразить строки в excel по условию

Скрытие/отображение ненужных строк и столбцов

Постановка задачи

Предположим, что у нас имеется вот такая таблица, с которой приходится «танцевать» каждый день:

outline1.gif

Кому таблица покажется маленькой — мысленно умножьте ее по площади в двадцать раз, добавив еще пару кварталов и два десятка крупных российских городов. 

Задача — временно убирать с экрана ненужные в данный момент для работы строки и столбцы, т.е., 

  • скрывать подробности по месяцам, оставляя только кварталы
  • скрывать итоги по месяцам и по кварталам, оставляя только итог за полугодие
  • скрывать ненужные в данный момент города (я работаю в Москве — зачем мне видеть Питер?) и т.д.

В реальной жизни примеров таких таблиц — море.

Способ 1. Скрытие строк и столбцов

Способ, прямо скажем, примитивный и не очень удобный, но два слова про него сказать можно. Любые выделенные предварительно строки или столбцы на листе можно скрыть, щелкнув по заголовку столбца или строки правой кнопкой мыши и выбрав в контекстном меню команду Скрыть (Hide):

outline2.gif

Для обратного отображения нужно выделить соседние строки/столбцы и, щелкнув правой кнопкой мыши, выбрать в меню, соответственно, Отобразить (Unhide).

Проблема в том, что с каждым столбцом и строкой придется возиться персонально, что неудобно.

Способ 2. Группировка

Если выделить несколько строк или столбцов, а затем выбрать в меню Данные — Группа и структура — Группировать (Data — Group and Outline — Group), то они будут охвачены прямоугольной скобкой (сгруппированы). Причем группы можно делать вложенными одна в другую (разрешается до 8 уровней вложенности):

outline3.gif

Более удобный и быстрый способ — использовать для группировки выделенных предварительно строк или столбцов сочетание клавиш Alt+Shift+стрелка вправо, а для разгруппировки Alt+Shift+стрелка влево, соответственно.

Такой способ скрытия ненужных данных гораздо удобнее — можно нажимать либо на кнопку со знаком «+» или ««, либо на кнопки с цифровым обозначением уровня группировки в левом верхнем углу листа — тогда все группы нужного уровня будут сворачиваться или разворачиваться сразу.

Кроме того, если в вашей таблице присутствуют итоговые строки или столбцы с функцией суммирования соседних ячеек, то есть шанс (не 100%-ый правда), что Excel сам создаст все нужные группировки в таблице одним движением — через меню Данные — Группа и структура — Создать структуру (Data — Group and Outline — Create Outline). К сожалению, подобная функция работает весьма непредсказуемо и на сложных таблицах порой делает совершенную ерунду. Но попробовать можно.

В Excel 2007 и новее все эти радости находятся на вкладке Данные (Data) в группе Структура (Outline):

outline5.gif

Способ 3. Скрытие помеченных строк/столбцов макросом

Этот способ, пожалуй, можно назвать самым универсальным. Добавим пустую строку и пустой столбец в начало нашего листа и отметим любым значком те строки и столбцы, которые мы хотим скрывать:

outline4.gif

Теперь откроем редактор Visual Basic (ALT+F11), вставим в нашу книгу новый пустой модуль (меню Insert — Module) и скопируем туда текст двух простых макросов:

Sub Hide()
    Dim cell As Range
    Application.ScreenUpdating = False                              'отключаем обновление экрана для ускорения
    For Each cell In ActiveSheet.UsedRange.Rows(1).Cells            'проходим по всем ячейкам первой строки
        If cell.Value = "x" Then cell.EntireColumn.Hidden = True    'если в ячейке x - скрываем столбец
    Next
    For Each cell In ActiveSheet.UsedRange.Columns(1).Cells         'проходим по всем ячейкам первого столбца
        If cell.Value = "x" Then cell.EntireRow.Hidden = True       'если в ячейке x - скрываем строку
    Next
    Application.ScreenUpdating = True
End Sub

Sub Show()
    Columns.Hidden = False   'отменяем все скрытия строк и столбцов
    Rows.Hidden = False
End Sub

Как легко догадаться, макрос Hide скрывает, а макрос Show — отображает обратно помеченные строки и столбцы. При желании, макросам можно назначить горячие клавиши (Alt+F8 и кнопка Параметры), либо создать прямо на листе кнопки для их запуска с вкладки Разработчик — Вставить — Кнопка (Developer — Insert — Button).

Способ 4. Скрытие строк/столбцов с заданным цветом

Допустим, что в приведенном выше примере мы, наоборот, хотим скрыть итоги, т.е. фиолетовые и черные строки и желтые и зеленые столбцы. Тогда наш предыдущий макрос придется немного видоизменить, добавив вместо проверки на наличие «х» проверку на совпадение цвета заливки с произвольно выбранными ячейками-образцами:

Sub HideByColor()
    Dim cell As Range
    Application.ScreenUpdating = False
    For Each cell In ActiveSheet.UsedRange.Rows(2).Cells
        If cell.Interior.Color = Range("F2").Interior.Color Then cell.EntireColumn.Hidden = True
        If cell.Interior.Color = Range("K2").Interior.Color Then cell.EntireColumn.Hidden = True
    Next
    For Each cell In ActiveSheet.UsedRange.Columns(2).Cells
        If cell.Interior.Color = Range("D6").Interior.Color Then cell.EntireRow.Hidden = True
        If cell.Interior.Color = Range("B11").Interior.Color Then cell.EntireRow.Hidden = True
    Next
    Application.ScreenUpdating = True
End Sub

Однако надо не забывать про один нюанс: этот макрос работает только в том случае, если ячейки исходной таблицы заливались цветом вручную, а не с помощью условного форматирования (это ограничение свойства Interior.Color). Так, например, если вы с помощью условного форматирования автоматически подсветили в своей таблице все сделки, где количество меньше 10:

outline7.png

…и хотите их скрывать одним движением, то предыдущий макрос придется «допилить». Если у вас Excel 2010-2013, то можно выкрутиться, используя вместо свойства Interior свойство DisplayFormat.Interior, которое выдает цвет ячейки вне зависимости от способа, которым он был задан. Макрос для скрытия синих строк тогда может выглядеть так:

Sub HideByConditionalFormattingColor()
    Dim cell As Range
    Application.ScreenUpdating = False
    For Each cell In ActiveSheet.UsedRange.Columns(1).Cells
        If cell.DisplayFormat.Interior.Color = Range("G2").DisplayFormat.Interior.Color Then cell.EntireRow.Hidden = True
    Next
    Application.ScreenUpdating = True
End Sub

Ячейка G2 берется в качестве образца для сравнения цвета. К сожалению, свойство DisplayFormat появилось в Excel только начиная с 2010 версии, поэтому если у вас Excel 2007 или старше, то придется придумывать другие способы.

Ссылки по теме

  • Что такое макрос, куда вставлять код макроса, как их использовать
  • Автоматическая группировка в многоуровневых списках

скрыть/отобразить строки в зависимости от значения в ячейке

SCRPN

Дата: Пятница, 20.12.2013, 13:49 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Есть таблица. В зависимости от того какое значение в ячейках A23:A26 (например, если «—«) надо скрыть или отобразить соотвествующую строку (23:26)

Если значение измениться, то заново отобразить/скрыть.

Сообщение отредактировал SCRPNПятница, 20.12.2013, 13:56

 

Ответить

slava

Дата: Пятница, 20.12.2013, 14:07 |
Сообщение № 2

Группа: Пользователи

Ранг: Новичок

Сообщений: 43


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Есть таблица. В зависимости от того какое значение в ячейках A23:A26 (например, если «—«) надо скрыть или отобразить соотвествующую строку (23:26)

Если значение измениться, то заново отобразить/скрыть.

Вот сюда загляни,мож поможет)) http://www.excelworld.ru/forum/2-8034-1

 

Ответить

_Boroda_

Дата: Пятница, 20.12.2013, 14:12 |
Сообщение № 3

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

SCRPN, Еще раз удалите модераторский комментарий в своем сообщении — я вас вообще забаню.
А в комментарии как раз и было написано про то, что нужно воспользоваться поиском — подобных тем на форуме великое множество. И Правила форума почитать.


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

SCRPN

Дата: Пятница, 20.12.2013, 14:20 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Отчего старожилам и модераторам не приходит в голову, что не всегда поиск выдает какой-либо результат… Коммент не удалял, возможно мы одновременно его правили.
[moder]А оттого, что мы, прежде, чем что-то написать, делаем то, про что пишем и наглядно убеждаемся в том, что написанное нами истинно.
То есть, вы хотите сказать, что запрос в поиске по сайту «скрыть строки» вам не дал ничего нужного? А может, вы просто ничего не искали?

Сообщение отредактировал SCRPNПятница, 20.12.2013, 14:29

 

Ответить

SCRPN

Дата: Пятница, 20.12.2013, 14:21 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

slava, спасибо за ссылку, изучаю.

Изучил. Не то, там не скрывается строка, а скрываются значения ячейки.

Видимо надо макросом с Rows(…).Hidden = True / False но VBA не владею…

Сообщение отредактировал SCRPNПятница, 20.12.2013, 14:25

 

Ответить

_Boroda_

Дата: Пятница, 20.12.2013, 14:29 |
Сообщение № 6

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Примечание: 
Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим
ссылку на оригинал (на английском языке)
.

В Microsoft Office InfoPath можно использовать условное форматирование для указания различные параметры форматирования для элемента управления, который находится на основе условий, возникающие в форме. Если указанные условия истинны при заполнении формы, основанного на шаблоне формы, условное форматирование применяется.

В этой статье объясняется, как с помощью условного форматирования для отображения или скрытия строки в повторяющуюся таблицу или повторяющийся раздел, в зависимости от того, нужно ли данных в строке совпадает со значением элемента управления поле со списком. Например если шаблона формы повторяющуюся таблицу, которая содержит строки товаров, которые относятся к одной из трех категорий (A, B или C), можно использовать условное форматирование для определения отображаемые строки, в зависимости от параметров, которые делают пользователей в форме.

Примечание: Чтобы предоставить пользователям возможность отобразить или скрыть сведения в форме можно использовать фильтры. Однако поскольку фильтры не поддерживаются для шаблон формы с поддержкой веб-браузера, условное форматирование является альтернативой фильтров в шаблонах форм с поддержкой браузера.

В этой статье

  • Шаг 1: Добавление элементов управления

  • Шаг 2: Укажите условного форматирования

  • Шаг 3: Предварительный просмотр шаблона формы

Шаг 1: Добавление элементов управления

Чтобы выполнить эту процедуру, шаблона формы должен содержать поле со списком и повторяющуюся таблицу. Чтобы добавить эти элементы управления, сделайте следующее:

  1. В шаблоне формы щелкните место вставки поле со списком и повторяющуюся таблицу.

  2. Если область задач Элементы управления не отображается, щелкните Другие элементы управления в меню Вставка или нажмите клавиши ALT+I, C.

  3. В разделе Вставить элементы управления в области задач элементы управления выберите элемент Список и нажмите кнопку Повторяющаяся таблица.

  4. При вставке повторяющейся таблицы, вам будет предложено количество столбцов. Оставьте значение по умолчанию 3 и нажмите кнопку ОК.

  5. Над полем списка, добавленного на шаблон формы, введите текст, который читает фильтра по типу:.

  6. Введите названия столбцов в первой строке повторяющейся таблицы, чтобы первый столбец считывает продукта, во втором столбце считывает Типи третий столбец считывает цены.

К началу страницы

Шаг 2: Укажите условного форматирования

После добавления элементов управления в шаблоне формы, вы можете указать соответствующий условное форматирование.

  1. Дважды щелкните поле со списком.

  2. Откройте вкладку Данные.

  3. В разделе элементы списка нажмите кнопку Добавить.

  4. В поле значение в диалоговом окне Добавить вариант введите Aи нажмите кнопку ОК.

  5. Повторите шаги 3 и 4 для добавления значений для B, C и d.

  6. В списке значений выберите D и нажмите кнопку По умолчанию.

  7. Выберите повторяющуюся таблицу в шаблоне формы и в меню Формат выберите Условное форматирование.

  8. В диалоговом окне Условное форматирование нажмите кнопку Добавить.

  9. В разделе это условие в первом поле выберите поле, которое соответствует второго столбца повторяющейся таблицы.

  10. Во втором поле выберите не равно.

  11. В третьем поле нажмите кнопку выбрать поля или группы.

  12. В диалоговом окне Выбор поля или группы выберите поле, соответствующее поле списка, добавленного в шаблоне формы и нажмите кнопку ОК.

    Примечание: Условие будет динамически сравнения двух значений.

  13. В разделе Применить форматирование в диалоговом окне Условное форматирование установите флажок Скрыть этот элемент управления.

    Примечание: Согласно этому условию, если содержимое второго столбца повторяющейся строки таблицы отличается от того, что выбрано в поле со списком, а затем соответствующий строк в повторяющейся таблице должны быть скрыты.

  14. Чтобы вернуться в шаблоне формы, дважды нажмите кнопку ОК.

  15. Дважды щелкните элемент управления, во втором столбце повторяющейся таблицы.

  16. Откройте вкладку Данные.

  17. Тип D в поле значение.

К началу страницы

Шаг 3: Предварительный просмотр шаблона формы

После добавления условное форматирование в шаблон формы, рекомендуется проверить изменения, чтобы убедиться, что они работают надлежащим образом.

  1. Чтобы проверить изменения, нажмите кнопку Просмотр на стандартной панели инструментов или нажмите клавиши CTRL+SHIFT+B.

    Примечание: По умолчанию выделенный в поле со списком является D. Прокрутка вверх в текстовом поле, чтобы увидеть другие значения, может потребоваться.

  2. Чтобы добавить несколько строк в повторяющуюся таблицу, в разделе повторяющейся таблицы нажмите кнопку Добавить элемент несколько раз.

  3. Для каждой строки во втором столбце повторяющейся таблицы замените значение по умолчанию DA, B или C.

    Примечание: Выражения с учетом регистра.

  4. Изменение выделения в поле со списком. Строк в повторяющейся таблице будут отображаться и больше не будут отображаться при выборе различных параметров.

К началу страницы

Нужна дополнительная помощь?

В Excel функция «Фильтр» широко используется в нашей повседневной работе. И в этом случае я расскажу, как фильтровать строки с определенным текстом в Excel. Например, здесь два столбца, и я хочу показать строки, содержащие «KTE», только в столбце B, как показано ниже.
doc отображать строки с определенным текстом 1

Показать строки содержат определенную строку с помощью функции фильтра

Показать строки, содержащие определенную строку, Kutools for Excelхорошая идея3


Показать строки содержат определенную строку с помощью функции фильтра

Чтобы отобразить строки, содержащие строку, вы можете сделать следующее:

1. Выберите используемые диапазоны и нажмите Данные > Фильтр для Фильтр функции.
doc отображать строки с определенным текстом 2

2. Затем щелкните значок фильтра в столбце, по которому нужно выполнить фильтрацию, и выберите Текстовые фильтры > Комплект. Смотрите скриншот:
doc отображать строки с определенным текстом 3

3. в Пользовательский автофильтр в диалоговом окне вы можете указать текст, на основе которого хотите выполнить фильтрацию. Смотрите скриншот:
doc отображать строки с определенным текстом 4

4. Нажмите OK. Затем отображаются только те строки, которые содержат указанную вами текстовую строку.


Показать строки, содержащие определенную строку, Kutools for Excel

Если вы обычно используете одни и те же критерии фильтрации для всех книг, вы можете применить Kutools for ExcelАвтора Суперфильтр функция, он может сохранить настройки фильтра для повторного использования всего несколькими щелчками мыши, без повторной настройки.

После установки Kutools for Excel, пожалуйста, сделайте, как показано ниже :( Бесплатная загрузка Kutools for Excel Сейчас!)

1. Выберите данные, которые вы хотите использовать, нажмите Кутулс Плюс > Суперфильтр. Смотрите скриншот:
doc отображать строки с определенным текстом 5

2. Затем в Суперфильтр панель, проверьте Указанный , чтобы исправить диапазон фильтрации, и укажите необходимые критерии в панели. Смотрите скриншот:
doc kutools супер фильтр 1

Для получения дополнительных сведений о фильтрации щелкните здесь.

3. Нажмите Фильтр для фильтрации диапазона.
doc kutools супер фильтр 3

4. Затем нажмите Сохранить текущие настройки фильтра кнопка док сохранить , затем появится диалоговое окно, в котором можно дать этому сценарию имя и указать диапазон применения сценария.
doc kutools супер фильтр 4

5. Нажмите OK, и вы можете открыть сценарий, щелкнув раскрывающееся меню> Открыть сохраненный сценарий настроек фильтра, чтобы выбрать текущий сохраненный сценарий, или нажав Управление сценариями настройки фильтров кнопка менеджер документов , выберите нужную настройку фильтра и нажмите Откройте чтобы в следующий раз включить настройки фильтра.
doc kutools супер фильтр 5
doc kutools супер фильтр 6

Наконечник. Если вы хотите получить бесплатную пробную версию Суперфильтр Функция, пожалуйста, перейдите на бесплатную пробную версию Kutools for Excel сначала, а затем перейдите к применению операции в соответствии с вышеуказанными шагами.


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Необходим макрос для скрытия и отображения строк при условии ячейки. Например есть столбец с месяцами года. При введении в ячейку «весна», скрываются строки с месяцами весны. При изменении ячейки на «зима» скрываются строки с зимними месяцами, а весенние отображаются. При введении какого либо другого значения — скрытия не происходит.


Цитата: Dauria от 07.04.2011, 14:58
Необходим макрос для скрытия и отображения строк при условии ячейки. Например есть столбец с месяцами года. При введении в ячейку «весна», скрываются строки с месяцами весны. При изменении ячейки на «зима» скрываются строки с зимними месяцами, а весенние отображаются. При введении какого либо другого значения — скрытия не происходит.

Может все же ОЗАДАЧИТЕ нас примерчиком?! ;)

Путей к вершине — множество. Этот один из многих!


Ну, пока Вы нас ОЗАДАЧИВАЕТЕ — набросал вот такой проектик. На скрепке.

Путей к вершине — множество. Этот один из многих!


Решил во время обеденного перерыва слегка повыпендриваться.
Сделал с именованными диапазонами на листе и массивами, в которых задаются соответствия «название»-«сезон»
При таком подходе «название»-это не обязательно название месяца, а «сезон»-не обязательно сезон года.
Вот, посмотрите кому интересно приаттаченный арховчик.

С уважением, Алексей


sm_beer  sm_clap Ну як шо цэ «повыпендриваться», то снимаю шляпу. Копирнул себе, если Вы не против.

Путей к вершине — множество. Этот один из многих!


Да нет, Gregory, тут до идеала, ИМХО, ещё есть куда копать.
Тот же список названий месяцев в массив, наверное, можно было как-то не руками вбивать (не красиво это), а циклом по перебору номеров месяцев от 1 до 12 формулой рабочего листа получить, но я с формулами листа не очень дружу. Попробовал пару формул написать — не получилось и ввёл вручную.
Но с другой стороны, а если показывать/прятать не месяцы, а, например, названия каких-то фруктов-овощей-ягод то так универсальнее…

С уважением, Алексей


И чуть короче(аттач). Леш, а месяцы в массив:

Public Sub www()
   Dim m(1 To 12) As String, i&
   For i = 1 To 12
       m(i) = MonthName(i)
   Next
End Sub

Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771


Dauria, если надо, чтоб выбранный сезон прятался, то последняя строка:
Range(«MONTHS»).EntireRow.Hidden = False: Range([b4]).EntireRow.Hidden = True

Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771


Спасибо, Gregory, все очень замечательно. А было бы еще лучше, если бы объяснил макрос, чтобы я его смог его под себя переделать.


Ну, Серёга, так — это просто прямо в лоб и заточено только под такое порядковое расположение месяцев. При месяцах-то вряд ли, конечно, кому-то в голову придёт другой их порядок перечисления и твоё решение отсутствующего примера тоже вполне логичное.
Но моё, ИМХО, более универсальное и гибкое. Но это только ИМХО. А вот Dauria, так и не выложив пример, выбрала вариант от GWolf.

А по поводу функции MonthName(), так я просто не знал о ней  :'(

С уважением, Алексей


Леш, при любом расположении месяцев в моем примере все зависит от того, как задать имена диапазонам.

Цитата: Alex_ST от 09.04.2011, 18:20
А вот Dauria, так и не выложив пример, выбрала вариант от GWolf.

Кажись не выбрала а выбрал ;D

Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771


Цитата: Dauria от 09.04.2011, 12:59
Спасибо, Gregory, все очень замечательно. А было бы еще лучше, если бы объяснил макрос, чтобы я его смог его под себя переделать.

Доброго дня!

Поскольку данный сайт просматривают и неавторы данных топиков, то выкладываю макрос с пояснениями прямо сюда. Может объясник кривовато, но как смог. Если где-то ошибся, а кто-то заметил: — Поправте, пожалуйста. Спасибо!

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim blok As Range '- переменная для хранения интервала параметров
    Dim cl As Range '- переменная для текущего значения параметра

    'Начнем с того, что код выполнятся будет, только при изменении значения в ячейке "C3"
    If Target.Address(ReferenceStyle:=xlR1C1) = "R2C3" Then

            'теперь посмотрим это самое изменение, если оно = "", то и выполнять нестоит
        If Target.Text = "" Then Exit Sub
        'ну а если все же введено непустое значение, то _
         для текущей активной книги и ее активного листа
        With ThisWorkbook.ActiveSheet
        'загрузим в переменную blok значения интервала "B4:B15"
        Set blok = .Range(Cells(4, 2), Cells(15, 2))

                'теперь перебираем значения из blok
        For Each cl In blok
            'и если высота строки = 0, то
            If Rows(cl.Row).RowHeight = 0 Then
                'установим высоту строки = 12.75
                Rows(cl.Row).RowHeight = 12.75
            End If
        Next
        'открыв т.о. все значения диапазона blok, займемся основной задачей: - посмотрим, _
         что же хочет пользователь: - Какое значение он ввел в ячейку определения парамет- _
         ра "Время года":

                Select Case Target.Text '- Какое значение он ввел в ячейку определения параметра "Время года":

                        'ПОСКОЛЬКУ, ДЛЯ ВСЕХ ВРЕМЕН ГОДА _
             СПОСОБ ДАЛЬНЕЙШИХ ДЕЙСТВИЙ ОДИНА- _
             КОВ, ПОКАЖЕМ НА ВРЕМЕНИ ГОДА "Зима"

                        Case "Зима", "зима", "ЗИМА" '- в ячейку введено "Зима" (в разных вариантах возможного написания)
                'перебираем значения из blok
                For Each cl In blok
                    'и если, очередное значение из blok = "Январь" или "Февраль" или "Декабрь"
                    If cl <> "Январь" And cl <> "Февраль" And cl <> "Декабрь" Then
                        ' то высоту строки с номером cl.Row, делаем = 0. Собственно И ВСЕ!
                        Rows(cl.Row).RowHeight = 0
                    End If
                Next
            Case "Весна", "весна", "ВЕСНА" '- в ячейку введено "Весна" (в разных вариантах возможного написания)
                For Each cl In blok
                    If cl <> "Март" And cl <> "Апрель" And cl <> "Май" Then
                        Rows(cl.Row).RowHeight = 0
                    End If
                Next
            Case "Лето", "лето", "ЛЕТО" '- в ячейку введено "Лето" (в разных вариантах возможного написания)
                For Each cl In blok
                    If cl <> "Июнь" And cl <> "Июль" And cl <> "Август" Then
                        Rows(cl.Row).RowHeight = 0
                    End If
                Next
            Case "Осень", "осень", "ОСЕНЬ" '- в ячейку введено "Осень" (в разных вариантах возможного написания)
                For Each cl In blok
                    If cl <> "Сентябрь" And cl <> "Октябрь" And cl <> "Ноябрь" Then
                        Rows(cl.Row).RowHeight = 0
                    End If
                Next
            Case Else '- в ячейку введен какой то другой набор символов
                MsgBox "Словоформа не является обозначением понятия " & Chr(171) & "Время года" & Chr(187) & "!"
        End Select
        End With
    End If
End Sub

ну или, если Вам нужно, что бы лист был свободен от макросов, ну скажем для копирования его и передачи другому пользователю, то вместо:

Private Sub Worksheet_Change(ByVal Target As Range)
....
End Sub

оберните все в:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
...
End Sub

но тогда нужно обязательно ссылаться на Sh — куда будет передаваться имя листа!

Путей к вершине — множество. Этот один из многих!


Вот видишь, Серёга, Dauria не ищет простых путей!
(кстати, в профиле пользователя М/Ж не указано и судить об этом можно только по единственному слову «смог» в посте, что вполне могло быть и опечаткой :D )
Ни твой простейший, ни мой чуть сложнее, но более гибкий варианты топик-стартера не заинтересовали… Хочет разобраться с вариантом GWolf . Ну, флаг — в руки.

GWolf,
примените Option Compare Text в декларациях модуля или UCase (cl) и Select Case UCase (Target) в процедуре чтобы не указывать все возможные варианты написания заглавных и строчных букв в названиях сезонов и месяцев (всё равно ВсЕ ВАриАнты НАПИсаНия нЕ пРЕДусМОТриТЕ)
Но всё равно, даже при вашем варианте решения, ИМХО, привязываться к конкретным ячейкам, прописывая их адреса в коде — не правильно. Намного удобнее использовать именованные диапазоны.
Тогда при необходимости добавить/удалить строку/столбец ВНЕ рабочей области таблицы (ну, например, создать дополнительную строку для заголовка таблицы или добавить слева от месяцев  доп. столбец) или переместить в другое место на листе ячейку выпадающего списка, из которого выбираются названия сезонов, не будет необходимости править код, т.к. именованные диапазоны сами будут «ползать» по листу.

С уважением, Алексей


Цитата: Alex_ST от 11.04.2011, 09:53
…примените Option Compare Text в декларациях модуля или UCase (cl) и Select Case UCase (Target) в процедуре чтобы не указывать все возможные варианты написания заглавных и строчных букв в названиях сезонов и месяцев (всё равно ВсЕ ВАриАнты НАПИсаНия нЕ пРЕДусМОТриТЕ)
Но всё равно, даже при вашем варианте решения, ИМХО, привязываться к конкретным ячейкам, прописывая их адреса в коде — не правильно. Намного удобнее использовать именованные диапазоны.
Тогда при необходимости добавить/удалить строку/столбец ВНЕ рабочей области таблицы (ну, например, создать дополнительную строку для заголовка таблицы или добавить слева от месяцев  доп. столбец) или переместить в другое место на листе ячейку выпадающего списка, из которого выбираются названия сезонов, не будет необходимости править код, т.к. именованные диапазоны сами будут «ползать» по листу.

Спасибо коллега! Учту.

Путей к вершине — множество. Этот один из многих!


И ещё:
1. В коде у вас указано:

        'загрузим в переменную blok значения интервала "B4:B15"
        Set blok = .Range(Cells(4, 2), Cells(15, 2))

это что, для того, чтобы запутать?
Наверное, понятнее было бы всё-таки так:

        'загрузим в переменную blok значения интервала "B4:B15"
        Set blok = .Range("B4:B15")

2. Зачем вы указываете конкретную высоту строки — 12,5:

Rows(cl.Row).RowHeight = 12.75
Может, всё-таки лучше использовать автоподбор высоты строки:

cl.EntireRow.AutoFit

С уважением, Алексей


Всем большое спасибо! Очень помогли.


Понравилась статья? Поделить с друзьями:
  • Отправить свое резюме word
  • Отобразить строка формул в excel
  • Отобразить скрытые имена excel
  • Отобразить сетку таблицы в excel
  • Отобразить сетку в word что это