Скрытие/отображение ненужных строк и столбцов
Постановка задачи
Предположим, что у нас имеется вот такая таблица, с которой приходится «танцевать» каждый день:
Кому таблица покажется маленькой — мысленно умножьте ее по площади в двадцать раз, добавив еще пару кварталов и два десятка крупных российских городов.
Задача — временно убирать с экрана ненужные в данный момент для работы строки и столбцы, т.е.,
- скрывать подробности по месяцам, оставляя только кварталы
- скрывать итоги по месяцам и по кварталам, оставляя только итог за полугодие
- скрывать ненужные в данный момент города (я работаю в Москве — зачем мне видеть Питер?) и т.д.
В реальной жизни примеров таких таблиц — море.
Способ 1. Скрытие строк и столбцов
Способ, прямо скажем, примитивный и не очень удобный, но два слова про него сказать можно. Любые выделенные предварительно строки или столбцы на листе можно скрыть, щелкнув по заголовку столбца или строки правой кнопкой мыши и выбрав в контекстном меню команду Скрыть (Hide):
Для обратного отображения нужно выделить соседние строки/столбцы и, щелкнув правой кнопкой мыши, выбрать в меню, соответственно, Отобразить (Unhide).
Проблема в том, что с каждым столбцом и строкой придется возиться персонально, что неудобно.
Способ 2. Группировка
Если выделить несколько строк или столбцов, а затем выбрать в меню Данные — Группа и структура — Группировать (Data — Group and Outline — Group), то они будут охвачены прямоугольной скобкой (сгруппированы). Причем группы можно делать вложенными одна в другую (разрешается до 8 уровней вложенности):
Более удобный и быстрый способ — использовать для группировки выделенных предварительно строк или столбцов сочетание клавиш Alt+Shift+стрелка вправо, а для разгруппировки Alt+Shift+стрелка влево, соответственно.
Такой способ скрытия ненужных данных гораздо удобнее — можно нажимать либо на кнопку со знаком «+» или «—«, либо на кнопки с цифровым обозначением уровня группировки в левом верхнем углу листа — тогда все группы нужного уровня будут сворачиваться или разворачиваться сразу.
Кроме того, если в вашей таблице присутствуют итоговые строки или столбцы с функцией суммирования соседних ячеек, то есть шанс (не 100%-ый правда), что Excel сам создаст все нужные группировки в таблице одним движением — через меню Данные — Группа и структура — Создать структуру (Data — Group and Outline — Create Outline). К сожалению, подобная функция работает весьма непредсказуемо и на сложных таблицах порой делает совершенную ерунду. Но попробовать можно.
В Excel 2007 и новее все эти радости находятся на вкладке Данные (Data) в группе Структура (Outline):
Способ 3. Скрытие помеченных строк/столбцов макросом
Этот способ, пожалуй, можно назвать самым универсальным. Добавим пустую строку и пустой столбец в начало нашего листа и отметим любым значком те строки и столбцы, которые мы хотим скрывать:
Теперь откроем редактор 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:
…и хотите их скрывать одним движением, то предыдущий макрос придется «допилить». Если у вас 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 или старше, то придется придумывать другие способы.
Ссылки по теме
- Что такое макрос, куда вставлять код макроса, как их использовать
- Автоматическая группировка в многоуровневых списках
Как автоматически скрывать не нужные столбцы |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Чего хотел то?
Хотел написать довольно узкую статью про то, как автоматизировать скрытие ненужных и открытие, вдруг ставших нужными, строк/столбцов на листе Excel. Однако статья получилась несколько шире. Excel особенно хорошо демонстрирует свою силу, когда вы соединяете вместе несколько стандартных инструментов. Вот и я, придумывая пример, не удержался от этого «синтеза» и невольно пришлось выйти за ранее намеченные рамки статьи. Впрочем, я даже рад этому, так как вы только тогда расправите крылья в Excel, когда научитесь комбинировать свои отдельные навыки, как это показано в этой статье.
Синтез
Каждый приём, примененный в этом учебном примере, — банальщина, а сведенные воедино — уже некая магия. Какие же приёмы мы объединили:
-
Формулы
-
Форматы данных
-
Условное форматирование
-
Макрос
-
Элементы управления
Суть учебного примера
Будем формировать вот такой прямоугольник из звёздочек в рамке. Высотой и шириной которого, можно управлять при помощи двух счётчиков слева.
Скачать пример
Разбор решения по шагам:
-
Смотрим лист Шаг 1. Рисуем жирную рамку вокруг диапазона D2:AY23. Зона для построения прямоугольника — E3:AX22.
-
В ячейке A1 будем хранить ширину прямоугольника, который нам надо будет нарисовать звёздочками. В ячейке A2 — высоту.
-
На пересечении строки 25 и столбца BA намечаем единичками наш будущий пояс видимости. Что это такое, расскажу позже.
-
Создаём 2 именованных диапазона для A1 и A2 с названиями Ширина и Высота соответственно.
-
В ячейку E3 вводим формулу
=ЕСЛИ(И(СТОЛБЕЦ()<=Ширина;СТРОКА()<=Высота);1;0) или
=IF(AND(COLUMN()<=Ширина;ROW()<=Высота);1;0),
распространяем на весь диапазон E3:AX22. -
Смотрим лист Шаг 2. Меняем формат данных диапазона E3:AX22 на «;;;«. Так же поступаем с A1:A2. Этот пустой формат данных очень удобен тогда, когда наши ячейки содержат служебную вспомогательную информацию и мы не хотим визуализации на листе их значений.
-
Через ленту РАЗРАБОТЧИК при включенном Режиме конструктора, через кнопку Вставить, добавляем 2 элемента управления типа Счётчик. Изменяем их как показано на экранах. Данные счётчики будут использованы для изменения значения диапазонов Ширина и Высота.
-
Теперь разберемся с поясом видимости. Этот пояс будет обрабатываться макросом, который в чётком соответствии с ним будет скрывать или показывать соответствующие строки или столбцы. Например, если в F25 будет 1, то столбец F будет видимым, а если 0, то макрос скроет этот столбец. Соответственно, если BA5 будет содержать 1, то строка 5 будет видима, а если 0, то будет скрыта. Ячейка BA25 будет отвечать за видимость и строки 25, и столбца BA одновременно.
В ячейки, чьи столбцы/строки, всегда должны быть видимыми (например A25:D25, которые отвечают за столбцы A:D) можно ввести просто единички. А вот в ячейки, которые должны управлять видимостью в динамике, мы введём формулы. E25, например, будет содержать =ЕСЛИ(ИЛИ(СУММ(E3:E22)>0;Видимость);1;0) или =IF(OR(SUM(E3:E22)>0;Видимость);1;0). Для нашего удобства я ввёл ещё один именованный диапазон Видимость, который располагается на листе Настройки и позволяет для наших нужд сделать все строки/столбцы видимыми, что может потребоваться вам для внесения изменений на листе (в противном случае вам пришлось бы делать видимыми столбцы и строки вручную, что довольно неудобно). Если Видимость истинна, то все наши сигнальные ячейки пояса верности видимости становятся равными всегда 1, вне зависимости от значений ячеек диапазона E3:AX22. В этом виновата формула ИЛИ (OR), которая возвращает ИСТИНА, если хотя бы 1 из её авгументов принял значение ИСТИНА.
-
Займёмся рисованием звёздочек на месте единичек в диапазоне E3:AX22. Создадим правило условного форматирования, как показано на экранах.
-
Ну и сделаем простой макрос, который будет сканировать пояс видимости и если текущая видимость столбца/строки не соответствует поясу, то он приводит это в соответствие, то есть либо скрывает, либо показывает строку/столбец.
-
Макрос, оформленный в виде процедуры ShowHide, будем вызывать из событий изменения счётчиков
а также события активации листа
Сводим всё воедино
Итак, на итоговом листе Шаг 3 все компоненты собраны воедино. Элементы управления счётчики настроены на изменение именованных диапазонов Ширина и Высота, которые через формулы влияют на появление единичек в диапазоне E3:AX22. На эти единички реагирует условное форматирование, рисуя на их месте звёздочки, и на них же реагируют ячейки пояса видимости, принимая значения 1 для тех столбцов/строк, которые должны быть видимыми, и 0 — для тех, что должны быть скрыты. Макрос, который скрывает/показывает строки и столбцы вызывается из события изменения счётчика и события активации листа.
Вывод
Я надеюсь, что не смотря на искусcтвенность примера, вы усвоили несколько важных приёмов, которые помогут вашим таблицам выглядеть более эффектно.
Читайте также:
-
Работа с объектом Range
-
Поиск границ текущей области
-
Массивы в VBA
-
Структуры данных и их эффективность
Содержание
- 1 Статья о том, как реализовать в файле программы «Эксель» строки или столбцы, скрывающиеся за ненадобностью.
- 2 Скрыть лишние строки можно следующими способами:
- 3 Сводные таблицы в программе Excel.
- 3.1 Постановка задачи
- 3.2 Способ 1. Скрытие строк и столбцов
- 3.3 Способ 2. Группировка
- 3.4 Способ 3. Скрытие помеченных строк/столбцов макросом
- 3.5 Способ 4. Скрытие строк/столбцов с заданным цветом
- 3.6 Ссылки по теме
Из этого руководства Вы узнаете и сможете научиться скрывать столбцы в Excel 2010-2013. Вы увидите, как работает стандартный функционал Excel для скрытия столбцов, а также научитесь группировать и разгруппировывать столбцы при помощи инструмента «Группировка».
Уметь скрывать столбцы в Excel очень полезно. Может быть множество причин не отображать на экране какую-то часть таблицы (листа):
- Необходимо сравнить два или более столбцов, но их разделяют несколько других столбцов. К примеру, Вы хотели бы сравнить столбцы A и Y, а для этого удобнее расположить их рядом. Кстати, в дополнение к этой теме, Вам может быть интересна статья Как закрепить области в Excel.
- Есть несколько вспомогательных столбцов с промежуточными расчётами или формулами, которые могут сбить с толку других пользователей.
- Вы хотели бы скрыть от посторонних глаз или защитить от редактирования некоторые важные формулы или информацию личного характера.
Читайте дальше, и вы узнаете, как Excel позволяет быстро и легко скрыть ненужные столбцы. Кроме того, из этой статьи Вы узнаете интересный способ скрыть столбцы с помощью инструмента «Группировка», который позволяет скрывать и отображать скрытые столбцы в одно действие.
- Скрываем выбранные столбцы в Excel
- Используем инструмент «Группировка», чтобы в один клик скрыть или отобразить столбцы
Скрываем выбранные столбцы в Excel
Вы хотите скрыть один или несколько столбцов в таблице? Есть простой способ сделать это:
- Откройте лист Excel и выделите столбцы, которые необходимо скрыть.
Подсказка: Чтобы выделить несмежные столбцы, отметьте их щелчком левой кнопки мыши при нажатой клавише Ctrl.
- Кликните правой кнопкой мыши на одном из выбранных столбцов, чтобы вызвать контекстное меню, и выберите Скрыть (Hide) из списка доступных действий.
Подсказка: Для тех, кто любит быстрые клавиши. Скрыть выделенные столбцы можно нажатием Ctrl+0.
Подсказка: Вы можете найти команду Скрыть (Hide) на Ленте меню Главная > Ячейки > Формат > Скрыть и отобразить (Home > Cells > Format > Hide & UnHide).
Вуаля! Теперь Вы с лёгкостью сможете оставить для просмотра только нужные данные, а не нужные скрыть, чтобы они не отвлекали от текущей задачи.
Используем инструмент «Группировка», чтобы в один клик скрыть или отобразить столбцы
Те, кто много работает с таблицами, часто используют возможность скрыть и отобразить столбцы. Существует ещё один инструмент, который отлично справляется с этой задачей, – Вы оцените его по достоинству! Этот инструмент – «Группировка». Бывает так, что на одном листе есть несколько несмежных групп столбцов, которые нужно иногда скрывать или отображать – и делать это снова и снова. В такой ситуации группировка значительно упрощает задачу.
Когда Вы группируете столбцы, сверху над ними появляется горизонтальная черта, показывающая, какие столбцы выбраны для группировки и могут быть скрыты. Рядом с чертой Вы увидите маленькие иконки, которые позволяют скрывать и отображать скрытые данные буквально в один клик. Увидев такие иконки на листе, Вы сразу поймёте, где находятся скрытые столбцы и какие столбцы могут быть скрыты. Как это делается:
- Откройте лист Excel.
- Выберите ячейки, которые надо скрыть.
- Нажмите Shift+Alt+Стрелка вправо.
- Появится диалоговое окно Группирование (Group). Выберите Колонны (Columns) и нажмите OK, чтобы подтвердить выбор.
Подсказка: Еще один путь к этому же диалоговому окну: Данные > Группировать > Группировать (Data > Group > Group).
Подсказка: Чтобы отменить группировку выберите диапазон, содержащий сгруппированные столбцы, и нажмите Shift+Alt+Стрелка влево.
- Инструмент «Группировка» добавит специальные символы структуры на лист Excel, которые покажут какие именно столбцы входят в группу.
- Теперь по одному выделяйте столбцы, которые необходимо скрыть, и для каждого нажимайте Shift+Alt+Стрелка вправо.
Замечание: Объединить в группу можно только смежные столбцы. Если требуется скрыть несмежные столбцы, то придётся создавать отдельные группы.
- Как только Вы нажмёте сочетание клавиш Shift+Alt+Стрелка вправо, скрытые столбцы будут показаны, а возле черты над сгруппированными столбцами появится специальная иконка со знаком «—» (минус).
- Нажатие на минус скроет столбцы, и «—» превратится в «+«. Нажатие на плюс моментально отобразит все скрытые в этой группе столбцы.
- После выполнении группировки в верхнем левом углу появляются маленькие цифры. Их можно использовать для того, чтобы скрывать и отображать одновременно все группы одинакового уровня. Например, в таблице, показанной ниже, нажатие на цифру скроет все столбцы, которые видны на этом рисунке, а нажатие на цифру скроет столбцы С и Е. Это очень удобно, когда Вы создаёте иерархию и несколько уровней группировки.
Вот и всё! Вы научились пользоваться инструментом для скрытия столбцов в Excel. Кроме того, Вы научились группировать и разгруппировывать столбцы. Надеемся, что знание этих хитростей поможет Вам сделать привычную работу в Excel гораздо проще.
Будьте успешны вместе с Excel!
Урок подготовлен для Вас командой сайта office-guru.ru
Источник: /> Перевел: Антон Андронов
Правила перепечаткиЕще больше уроков по Microsoft Excel
Оцените качество статьи. Нам важно ваше мнение:
Статья о том, как реализовать в файле программы «Эксель» строки или столбцы, скрывающиеся за ненадобностью.
Опишем пошагово три способа реализации, обозначенной выше задачи – спрятать строки или столбцы.
Предположим у нас имеется огромная таблица в тысячу столбцов шириной и 150 тыс. строк высотой. Для осмысления и аналитики информации, содержащейся в таблице гораздо проще и приятнее работать с промежуточными итогами, скрывая лишние строки.
Скрыть лишние строки можно следующими способами:
- Первый способ — самый простой и примитивный заключается в том, чтобы выделить ненужные столбцы или строчки (сквозным выделением) и нажатием правой кнопки мыши в контекстном меню выбрать действие «Скрыть».
Показать скрытые строки или столбцы можно выделив нужный диапазон и выбрав в контекстном меню действие «Показать». - Второй способ немного сложнее. Данный способ заключается в группировке строк или столбцов при помощи опции «Группировать» во вкладке «Данные» меню быстрого доступа. Эта опция позволяет разбить информацию на группы и открывать или прятать строки(столбцы) нажатием(кликом) по крестику. Преимущество этого метода в том, что можно создавать несколько уровней группировки и отображать при необходимость данные только определенного уровня. То есть информация открывается ступенчато в виде «древа».
Группировка данных осуществляется следующим образом:
- Необходимо выделить столбцы или строки сквозным выделением (для каждой группы отдельно);
- Кликнуть по пиктограмме «Группировка» в разделе «Данные». Информация будет сгруппирована автоматически.
Если Вам недостаточно автоматической группировки, можете использовать опцию «Создание структуры…».
Следует помнить, что группировка захватывает соседнюю с выделенным диапазоном ячейку, поэтому выделять нужно на одну ячейку меньше, либо следует вставить между группируемыми диапазонами пустые строки — разделители.
- Третий способ скрыть ненужные данные и отображать только важную информацию — это сводные таблицы. Сводные таблицы преображают весь диапазон информации в нужную Вам структуру данных. Важным преимуществом сводных таблиц является то, что вы можете конфигурировать структуру данных нужным вам способом в реальном времени в процессе проведения аналитики.
Процесс создания сводной таблице описан в статье ниже по ссылке:
Постановка задачи
Предположим, что у нас имеется вот такая таблица, с которой приходится «танцевать» каждый день:
Кому таблица покажется маленькой — мысленно умножьте ее по площади в двадцать раз, добавив еще пару кварталов и два десятка крупных российских городов.
Задача — временно убирать с экрана ненужные в данный момент для работы строки и столбцы, т.е.,
- скрывать подробности по месяцам, оставляя только кварталы
- скрывать итоги по месяцам и по кварталам, оставляя только итог за полугодие
- скрывать ненужные в данный момент города (я работаю в Москве — зачем мне видеть Питер?) и т.д.
В реальной жизни примеров таких таблиц — море.
Способ 1. Скрытие строк и столбцов
Способ, прямо скажем, примитивный и не очень удобный, но два слова про него сказать можно. Любые выделенные предварительно строки или столбцы на листе можно скрыть, щелкнув по заголовку столбца или строки правой кнопкой мыши и выбрав в контекстном меню команду Скрыть (Hide):
Для обратного отображения нужно выделить соседние строки/столбцы и, щелкнув правой кнопкой мыши, выбрать в меню, соответственно, Отобразить (Unhide).
Проблема в том, что с каждым столбцом и строкой придется возиться персонально, что неудобно.
Способ 2. Группировка
Если выделить несколько строк или столбцов, а затем выбрать в меню Данные — Группа и структура — Группировать (Data — Group and Outline — Group), то они будут охвачены прямоугольной скобкой (сгруппированы). Причем группы можно делать вложенными одна в другую (разрешается до 8 уровней вложенности):
Более удобный и быстрый способ — использовать для группировки выделенных предварительно строк или столбцов сочетание клавиш Alt+Shift+стрелка вправо, а для разгруппировки Alt+Shift+стрелка влево, соответственно.
Такой способ скрытия ненужных данных гораздо удобнее — можно нажимать либо на кнопку со знаком «+» или «—«, либо на кнопки с цифровым обозначением уровня группировки в левом верхнем углу листа — тогда все группы нужного уровня будут сворачиваться или разворачиваться сразу.
Кроме того, если в вашей таблице присутствуют итоговые строки или столбцы с функцией суммирования соседних ячеек, то есть шанс (не 100%-ый правда), что Excel сам создаст все нужные группировки в таблице одним движением — через меню Данные — Группа и структура — Создать структуру (Data — Group and Outline — Create Outline). К сожалению, подобная функция работает весьма непредсказуемо и на сложных таблицах порой делает совершенную ерунду. Но попробовать можно.
В Excel 2007 и новее все эти радости находятся на вкладке Данные (Data) в группе Структура (Outline):
Способ 3. Скрытие помеченных строк/столбцов макросом
Этот способ, пожалуй, можно назвать самым универсальным. Добавим пустую строку и пустой столбец в начало нашего листа и отметим любым значком те строки и столбцы, которые мы хотим скрывать:
Теперь откроем редактор 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:
…и хотите их скрывать одним движением, то предыдущий макрос придется «допилить». Если у вас 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 или старше, то придется придумывать другие способы.
Ссылки по теме
- Что такое макрос, куда вставлять код макроса, как их использовать
- Автоматическая группировка в многоуровневых списках
Автоматическое скрытие пустых столбцов в таблице, возможно ли?
Автор Олег*, 05.10.2012, 14:13
« назад — далее »
У меня поля таблицы заполняются макросом, обрабатывающим поступающие данные. Сколько будет данных заранее неизвестно, поэтому я резервирую дополнительные (лишние) столбцы. На расчеты это не влияет, а вот сейчас захотел визуализировать полученные данные с помощью спарклайнов и столкнулся с тем, что из-за наличия пустых столбцов они (спарклайны) получаются не оптимальными с точки зрения эстетики и информативности.
В связи с этим возник вопрос: можно ли установить какое-нибудь свойство таблицы, чтобы полностью пустые столбцы автоматически скрывались?
Если такого средства нет, то можно ли как-нибудь сделать это с помощью макроса?
А если это тоже невозможно, то как можно так настроить спарклайны, чтобы они полностью игнорировали все пустые ячейки? На самом деле, этот вопрос надо было бы поставить первым, поскольку при наличие такой возможности все остальные заданные в этой теме вопросы сами собой отпадают.
Прилагаю рабочую книгу с «некрасивыми», неинформативными спарклайнами.
Не подойдет такой вариант:
выделяем Спарклайны-вкладка Работа со спарклайнами-Изменить данные-Скрытые и пустые ячейки-Показывать как…Линию
Если не подойдет — думаю, только скрытие столбцов(макросом или вручную).
А вот примерный текст кода для скрытия столбцов:
Sub Hide_Cols()
Dim rCell As Range, lLastRow As Long, lLastCol As Long, lCol As Long
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Application.ScreenUpdating = 0
For lCol = 2 To lLastCol - 1
Columns(lCol).Hidden = (Range(Cells(2, lCol), Cells(lLastRow, lCol)).Text = "")
Next lCol
Application.ScreenUpdating = 1
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453
Или может еще вот так понравится?
Скажи мне, кудесник, любимец ба’гов…
Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995
Цитата: _Boroda_ от 06.10.2012, 03:02
Или может еще вот так понравится?
Сейчас сравнил свой исходный файл с вашим. У вас вроде бы понагляднее получилось чем у меня (в смысле, динамика изменения данных просматривается лучше), но все равно, на мой взгляд, нормальному восприятию мешают эти длинные линии (у меня) и большие пустоты (у вас). Все-таки прихожу к выводу, что оптимальное решение — это прятать пустые столбцы, чтобы они не влияли на спарклайны, да и таблица в таком виде будет выглядеть гораздо симпатичнее. Одним словом, сразу двух зайцев в одном флаконе
Цитата: Prist от 05.10.2012, 14:33
Не подойдет такой вариант:
выделяем Спарклайны-вкладка Работа со спарклайнами-Изменить данные-Скрытые и пустые ячейки-Показывать как…Линию
Да я там вроде бы все варианты перепробовал перед тем, как эту тему на форуме поднять. Вроде бы все как-то не очень наглядно получалось.
Цитата: Prist от 05.10.2012, 14:33
Если не подойдет — думаю, только скрытие столбцов(макросом или вручную).
А вот примерный текст кода для скрытия столбцов:Sub Hide_Cols()
Dim rCell As Range, lLastRow As Long, lLastCol As Long, lCol As Long
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Application.ScreenUpdating = 0
For lCol = 2 To lLastCol - 1
Columns(lCol).Hidden = (Range(Cells(2, lCol), Cells(lLastRow, lCol)).Text = "")
Next lCol
Application.ScreenUpdating = 1
End Sub
А вот это подошло идеально! Спасибо большое!
Но только проблема возникла. Сегодня целый день над ней тружусь, но пока не получается справиться. Дело в том, что когда я ваш код добавил в ту книгу, которую выложил на форуме, все заработала на ура. А вот когда стал пытаться «вмонтировать» этот же самый код в свой «большой проект» , то столкнулся с тем, что сначала он у меня скрывал столбцы совсем не на том листе, на котором хотелось бы
, а теперь (после нескольких часов упорного поиска причины затруднений) стал скрывать столбцы на том листе, на котором надо, но совсем не те, которые надо
Одним словом продолжаю ставить брекпойнты и занимаюсь отловом багов
Олег, полагаю, что имеет смысл принудительно указать имя листа, на котором скрывать столбцы. Т.к., скорее всего, у Вас есть еще макросы в книге, которые выполняют свои задачи и конфликтуют с данным кодом.
Sub Hide_Cols()
Dim rCell As Range, lLastRow As Long, lLastCol As Long, lCol As Long
With Sheets("Имя листа")
lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
lLastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
Application.ScreenUpdating = 0
For lCol = 2 To lLastCol - 1
.Columns(lCol).Hidden = (.Range(.Cells(2, lCol), .Cells(lLastRow, lCol)).Text = "")
Next lCol
End With
Application.ScreenUpdating = 1
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453
Цитата: Prist от 07.10.2012, 10:14
Олег, полагаю, что имеет смысл принудительно указать имя листа, на котором скрывать столбцы. Т.к., скорее всего, у Вас есть еще макросы в книге, которые выполняют свои задачи и конфликтуют с данным кодом.Sub Hide_Cols()
Dim rCell As Range, lLastRow As Long, lLastCol As Long, lCol As Long
With Sheets("Имя листа")
lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
lLastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
Application.ScreenUpdating = 0
For lCol = 2 To lLastCol - 1
.Columns(lCol).Hidden = (.Range(.Cells(2, lCol), .Cells(lLastRow, lCol)).Text = "")
Next lCol
End With
Application.ScreenUpdating = 1
End Sub
Идеально!