Как скрывать ячейки в excel макросами

Как скрыть или отобразить строки и столбцы с помощью свойства Range.Hidden из кода VBA Excel? Примеры скрытия и отображения строк и столбцов.

Range.Hidden — это свойство, которое задает или возвращает логическое значение, указывающее на то, скрыты строки (столбцы) или нет.

Синтаксис

Expression — выражение (переменная), возвращающее объект Range.

  • True — диапазон строк или столбцов скрыт;
  • False — диапазон строк или столбцов не скрыт.

Примечание

Указанный диапазон (Expression) должен охватывать весь столбец или строку. Это условие распространяется и на группы столбцов и строк.

Свойство Range.Hidden предназначено для чтения и записи.

Примеры кода с Range.Hidden

Пример 1

Варианты скрытия и отображения третьей, пятой и седьмой строк с помощью свойства Range.Hidden:

Sub Primer1()

‘Скрытие 3 строки

Rows(3).Hidden = True

‘Скрытие 5 строки

Range(«D5»).EntireRow.Hidden = True

‘Скрытие 7 строки

Cells(7, 250).EntireRow.Hidden = True

    MsgBox «3, 5 и 7 строки скрыты»

‘Отображение 3 строки

Range(«L3»).EntireRow.Hidden = False

‘Скрытие 5 строки

Cells(5, 250).EntireRow.Hidden = False

‘Скрытие 7 строки

Rows(7).Hidden = False

    MsgBox «3, 5 и 7 строки отображены»

End Sub

Пример 2

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

Sub Primer2()

‘Скрытие 3 столбца

Columns(3).Hidden = True

‘Скрытие 5 столбца

Range(«E2»).EntireColumn.Hidden = True

‘Скрытие 7 столбца

Cells(25, 7).EntireColumn.Hidden = True

    MsgBox «3, 5 и 7 столбцы скрыты»

‘Отображение 3 столбца

Range(«C10»).EntireColumn.Hidden = False

‘Отображение 5 столбца

Cells(125, 5).EntireColumn.Hidden = False

‘Отображение 7 столбца

Columns(«G»).Hidden = False

    MsgBox «3, 5 и 7 столбцы отображены»

End Sub

Пример 3

Варианты скрытия и отображения сразу нескольких строк с помощью свойства Range.Hidden:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Sub Primer3()

‘Скрытие одновременно 2, 3 и 4 строк

Rows(«2:4»).Hidden = True

    MsgBox «2, 3 и 4 строки скрыты»

‘Скрытие одновременно 6, 7 и 8 строк

Range(«C6:D8»).EntireRow.Hidden = True

    MsgBox «6, 7 и 8 строки скрыты»

‘Отображение 2, 3 и 4 строк

Range(«D2:F4»).EntireRow.Hidden = False

    MsgBox «2, 3 и 4 строки отображены»

‘Отображение 6, 7 и 8 строк

Rows(«6:8»).Hidden = False

    MsgBox «6, 7 и 8 строки отображены»

End Sub

Пример 4

Варианты скрытия и отображения сразу нескольких столбцов из кода VBA Excel:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Sub Primer4()

‘Скрытие одновременно 2, 3 и 4 столбцов

Columns(«B:D»).Hidden = True

    MsgBox «2, 3 и 4 столбцы скрыты»

‘Скрытие одновременно 6, 7 и 8 столбцов

Range(«F3:H40»).EntireColumn.Hidden = True

    MsgBox «6, 7 и 8 столбцы скрыты»

‘Отображение 2, 3 и 4 столбцов

Range(«B6:D6»).EntireColumn.Hidden = False

    MsgBox «2, 3 и 4 столбцы отображены»

‘Отображение 6, 7 и 8 столбцов

Columns(«F:H»).Hidden = False

    MsgBox «6, 7 и 8 столбцы отображены»

End Sub


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

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

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

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 или старше, то придется придумывать другие способы.

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

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

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

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

Вот так выглядят простые примеры, с помощью которых Вы без труда сможете скрывать или отображать строки и столбцы с помощью VBA

Пример 1: Скрыть строку 2 в Excel

Sub HideString()  ‘Это название макроса

Rows(2).Hidden = True

End Sub

Пример 2: Скрыть несколько строк в Excel (строку 3-5)

Sub HideStrings()

Rows(«3:5»).Hidden = True

End Sub

Пример 3: Скрыть столбец 2 в Excel

Sub HideCollumn()

Columns(2).Hidden = True

End Sub

Пример 4: Скрытие нескольких столбцов в Excel

Sub HideCollumns()

Columns(«E:F»).Hidden = True

End Sub

Пример 5: Скрытие строки по имени ячейки в Excel

Sub HideCell()

Range(«Возможности Excel»).EntireRow.Hidden = True

End Sub

Пример 6: Скрытие нескольких строк по адресам ячеек

Sub HideCell()

Range(«B3:D4»).EntireRow.Hidden = True

End Sub

Пример 7: Скрытие столбца по имени ячейки

Sub HideCell()

Range(«Возможности Excel»).EntireColumn.Hidden = True

End Sub

Пример 8: Скрытие нескольких столбцов по адресам ячеек

Sub HideCell()

Range(«C2:D5»).EntireColumn.Hidden = True

End Sub

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

Для того, чтобы отобразить строки и  столбцы в Excel вы можете воспользоваться этими же макросами, но вместе True необходимо указать False

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

Sub ViewString()

Rows(2).Hidden = False

End Sub

Надеемся, что данная статья была полезна вам и ответила на вопрос: как скрыть или отобразить строки и столбцы в Excel с помощью VBA

Спасибо за внимание.

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

док скрыть строки на основе значения 1


В Excel вы можете использовать функцию «Фильтр» для фильтрации и скрытия строк на основе значения ячейки.

1. Выберите данные, которые нужно отфильтровать, и нажмите Данные > Фильтр. Смотрите скриншот:

док скрыть строки на основе значения 2

2. Затем щелкните стрелку вниз, чтобы отобразить раскрывающийся список фильтров, и щелкните Числовые фильтры (или текстовые фильтры) > Больше чем (вы можете выбрать другой критерий в подменю). Смотрите скриншот:

док скрыть строки на основе значения 3

3. В появившемся диалоговом окне введите критерий в текстовое поле рядом с больше чем. Смотрите скриншот:

док скрыть строки на основе значения 4

4. Нажмите OK. Теперь отображаются только данные, превышающие 3000, а строки, данные которых меньше 3000, скрыты.

док скрыть строки на основе значения 5


Более того, если вас интересует код VBA, здесь я могу представить код VBA для скрытия строк на основе значения ячейки.

1. Нажмите Alt + F11 ключи для включения Microsoft Visual Basic для приложений окно.

2. Затем нажмите Вставить > Модули открыть новый Модули window и вставьте в него код VBA.

VBA: скрыть строки на основе значения ячейки.

Sub HideRow()
'Updateby20150618
Dim Rng As Range
Dim WorkRng As Range
Dim xNumber As Integer
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
xNumber = Application.InputBox("Number", xTitleId, "", Type:=1)
For Each Rng In WorkRng
    Rng.EntireRow.Hidden = Rng.Value < xNumber
Next
End Sub

3. Затем нажмите F5 нажмите клавишу для запуска VBA, затем выберите диапазон данных, в котором вы хотите скрыть строки в всплывающем диалоговом окне (за исключением заголовков). Смотрите скриншот:

док скрыть строки на основе значения 6

4. Нажмите OK, и введите номер критерия во втором диалоговом окне. Смотрите скриншот:

док скрыть строки на основе значения 7

5. Нажмите OK. Теперь строки, данные которых меньше 3000, скрыты.

Наконечник: Если вы хотите скрыть строки, превышающие 3000, просто измените Rng.EntireRow.Hidden = Rng.Value <xNumber в Rng.EntireRow.Hidden = Rng.Value> xNumber, или если вы хотите скрыть строки, данные которых равны 3000, измените на Rng.EntireRow.Hidden = Rng.Value = xNumber.



ЕСЛИ вам не нравится включать функцию фильтра, как и VBA, я представляю вам удобный инструмент — Выбрать определенные ячейки of Kutools for Excel чтобы быстро выбрать целые строки на основе значения ячейки, затем вы можете скрыть их.

После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:

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

1. Выберите диапазон данных и нажмите Кутулс > Выберите > Выбрать определенные ячейки. Смотрите скриншот:

док скрыть строки на основе значения 14

2. в Выбрать определенные ячейки диалог, проверьте Весь ряд под Тип выбора раздел, затем выберите нужный критерий из Конкретный тип список, затем введите число или текст в текстовое поле. Смотрите скриншот:

док скрыть строки на основе значения 9

3. Нажмите Ok > OK закрыть диалоги. Теперь выбираются строки, данные которых меньше 3000, и вам просто нужно щелкнуть правой кнопкой мыши заголовок строки, чтобы отобразить контекстное меню, и выбрать «Скрыть». Смотрите скриншот:
док скрыть строки на основе значения 10

Теперь строки, данные которых меньше 3000, скрыты.

док скрыть строки на основе значения 11

Наконечник:

1. Если вы хотите скрыть строки, содержащие определенное значение, вы можете выбрать Комплект и введите определенное значение в текстовое поле.

док скрыть строки на основе значения 12

2. Если вы хотите скрыть строки, которые содержат значения больше, но меньше значений, вы можете выбрать Больше и Менее, затем введите значения в два поля и установите флажок И,.

док скрыть строки на основе значения 13

Работы С Нами 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% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Чего хотел то?

Хотел написать довольно узкую статью про то, как автоматизировать скрытие ненужных и открытие, вдруг ставших нужными, строк/столбцов на листе Excel. Однако статья получилась несколько шире. Excel особенно хорошо демонстрирует свою силу, когда вы соединяете вместе несколько стандартных инструментов. Вот и я, придумывая пример, не удержался от этого «синтеза» и невольно пришлось выйти за ранее намеченные рамки статьи. Впрочем, я даже рад этому, так как вы только тогда расправите крылья в Excel, когда научитесь комбинировать свои отдельные навыки, как это показано в этой статье.

Синтез

Каждый приём, примененный в этом учебном примере, — банальщина, а сведенные воедино — уже некая магия. Какие же приёмы мы объединили:

  • Формулы

  • Форматы данных

  • Условное форматирование

  • Макрос

  • Элементы управления

Суть учебного примера

Будем формировать вот такой прямоугольник из звёздочек в рамке. Высотой и шириной которого, можно управлять при помощи двух счётчиков слева.

Скачать пример

Разбор решения по шагам:

  1. Смотрим лист Шаг 1. Рисуем жирную рамку вокруг диапазона D2:AY23. Зона для построения прямоугольника — E3:AX22.

  2. В ячейке A1 будем хранить ширину прямоугольника, который нам надо будет нарисовать звёздочками. В ячейке A2 — высоту.

  3. На пересечении строки 25 и столбца BA намечаем единичками наш будущий пояс видимости. Что это такое, расскажу позже.

  4. Создаём 2 именованных диапазона для A1 и A2 с названиями Ширина и Высота соответственно.

  5. В ячейку E3 вводим формулу
    =ЕСЛИ(И(СТОЛБЕЦ()<=Ширина;СТРОКА()<=Высота);1;0) или
    =IF(AND(COLUMN()<=Ширина;ROW()<=Высота);1;0),
    распространяем на весь диапазон E3:AX22.

  6. Смотрим лист Шаг 2. Меняем формат данных диапазона E3:AX22 на «;;;«. Так же поступаем с A1:A2. Этот пустой формат данных очень удобен тогда, когда наши ячейки содержат служебную вспомогательную информацию и мы не хотим визуализации на листе их значений.

  7. Через ленту РАЗРАБОТЧИК при включенном Режиме конструктора, через кнопку Вставить, добавляем 2 элемента управления типа Счётчик. Изменяем их как показано на экранах. Данные счётчики будут использованы для изменения значения диапазонов Ширина и Высота.

  8. Теперь разберемся с поясом видимости. Этот пояс будет обрабатываться макросом, который в чётком соответствии с ним будет скрывать или показывать соответствующие строки или столбцы. Например, если в 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 из её авгументов принял значение ИСТИНА.

  9. Займёмся рисованием звёздочек на месте единичек в диапазоне E3:AX22. Создадим правило условного форматирования, как показано на экранах.

  10. Ну и сделаем простой макрос, который будет сканировать пояс видимости и если текущая видимость столбца/строки не соответствует поясу, то он приводит это в соответствие, то есть либо скрывает, либо показывает строку/столбец.

  11. Макрос, оформленный в виде процедуры ShowHide, будем вызывать из событий изменения счётчиков

    а также события активации листа

Сводим всё воедино

Итак, на итоговом листе Шаг 3 все компоненты собраны воедино. Элементы управления счётчики настроены на изменение именованных диапазонов Ширина и Высота, которые через формулы влияют на появление единичек в диапазоне E3:AX22. На эти единички реагирует условное форматирование, рисуя на их месте звёздочки, и на них же реагируют ячейки пояса видимости, принимая значения 1 для тех столбцов/строк, которые должны быть видимыми, и 0 — для тех, что должны быть скрыты. Макрос, который скрывает/показывает строки и столбцы вызывается из события изменения счётчика и события активации листа.

Вывод

Я надеюсь, что не смотря на искусcтвенность примера, вы усвоили несколько важных приёмов, которые помогут вашим таблицам выглядеть более эффектно.

Читайте также:

  • Работа с объектом Range

  • Поиск границ текущей области

  • Массивы в VBA

  • Структуры данных и их эффективность

Как скрыть строки при условии без применения фильтра

Автор Serj Kalsin, 29.01.2010, 13:52

« назад — далее »

Здравствуйте!

Имеется таблица, в которой по итогу расчитываются две надбавки к основным ценам, надбавка эта меняется в зависимости применения определенного коэффициента.
Но когда коэффициент равен нулю, я хочу чтобы эти строки с надбавками автоматом скрывались.
Возможно ли такое?

Приложил файл где все описано что я хочу получить на выходе.
Надеюсь на вашу помощь!!!


Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Хороший метод!
Только я никогда не работал с макросами.
Вы этот макрос как создали?
Чтобы мне такой макрос применять в других моих настоящих документах, что мне надо сделать?


Жмем ПКМ на название листа — «Исходный текст», попадаем в модуль листа. Туда вставляем такой код

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$3" Or Target.Address = "$C$4" Then
   Rows("29:31").EntireRow.Hidden = [c3] + [c4] = 0
   Rows(28 - ([c3] = 0) - ([c4] = 0) * 2).EntireRow.Hidden = ([c3] = 0) + ([c4] = 0)
End If
End Sub

где
1. $C$3 и $C$4 — адреса ячеек, при изменении значений в которых будет отрабатывать наш макрос,
2. Rows(«29:31») — строки, которые нужно скрывать — отображать,
3. [с3] и [с4] — значения ячек С3 и С4,
4. Rows(«29:31»).EntireRow.Hidden — скрытие строк 29:31 (если не равно 0, то скрыты, если 0 — отображены),
5. 28 — строка, на единицу выше первой строки из п. 2,
6. [c3] = 0 — принимает значение 1, если С3=0, иначе — 0,
7. 28 — ([c3] = 0) — ([c4] = 0) * 2 — принимает значение от 28 до 31 в зависимости от того, равны ли нолю С3 и С4,
8. ([c3] = 0) + ([c4] = 0) — принимает значение от 0 до 2 в зависимости от того, равны ли нолю С3 и С4 (если не равно 0, то строки из п. 7 скрыты, если 0 — отображены),
9. Target — именяемая ячейка.

Уокенбах «Профессиональное програмирование на VBA в Excel » для 2007, для 2003
Джелен «VBA и макросы в майкрософт оффис excel 2007»
Гарнаев «Excel 2002 Разработка приложений»

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Спасибо!
Буду изучать этот код и пытаться его понять.
Огромное спасибо!

А может посоветуете какую-нибудь книгу по макросам, как их программировать и т.п. Или может какой-нибудь ресурс.


У меня похожая задача и ваш пример идеально подходит для ее решения.
Но к сожалению не получается составить аналогичный пример.
Помогите плз.

Суть в следующем: Есть ячейка D11 с выпадающим списком от 2х до 8. Нужно что бы при выборе значения скрывались определенные диапазоны строк от 69 до 200 при 2, от 91 до 200 при 3х и т.д.

И есть ячейка D12 в которой тоже выбор значения из списка но уже текстового.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim R%
Application.ScreenUpdating = False
Rows("46:200").EntireRow.Hidden = False
If Target.Address = "$D$11" Then
   If Target.Value <> 8 Then
     R = Choose(Target.Value, 47, 69, 91, 113, 157, 179)
     Rows(R & ":200").EntireRow.Hidden = True
    End If
End If
Application.ScreenUpdating = True
End Sub
в модуль листа


Спасибо огромное!
Есть только проблема когда удаляешь значение из ячейки D11 макрос выдает ошибку.
А нужно что бы он делал строки видимыми.

И как мне учесть выбор из ячейки d12? Попробовал по аналогии с вашим макросом не получилось.


зачем удалять? ставите 8 и все кассы видны.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R%
Application.ScreenUpdating = False
Rows("46:200").EntireRow.Hidden = False
If Target.Address = "$D$11" Then
   If Target.Value <> "" Then
      If Target.Value <> 8 Then
      R = Choose(Target.Value, 47, 69, 91, 113, 157, 179)
      Rows(R & ":200").EntireRow.Hidden = True
      End If
   End If
End If
Application.ScreenUpdating = True
End Sub

про d12 опишите что вам там нужно.


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

В ячейке d12 есть выбор между 2 значениями. «Система видеонаблюдения».

Соответственно если выбрана одна из систем 2я скрывается.
Скрываются строки 224:232 если выбран ITV и 233:247 если RVI.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim R%
Application.ScreenUpdating = False
If Target.Address = "$D$11" Then
   If Target.Value <> "" And Target.Value <> 8 Then
      Rows("46:200").EntireRow.Hidden = False
      R = Choose(Target.Value, 47, 69, 91, 113, 157, 179)
      Rows(R & ":200").EntireRow.Hidden = True
   Else
      Rows("46:200").EntireRow.Hidden = False
   End If: Exit Sub
ElseIf Target.Address = "$D$12" Then
   If Target.Value <> "" Then
       Rows("224:247").EntireRow.Hidden = False
       If Target.Value = "RVI" Then
       Rows("233:247").EntireRow.Hidden = True
       Else
       Rows("224:232").EntireRow.Hidden = True
       End If
   Else
   Rows("224:247").EntireRow.Hidden = False
   End If
End If
Application.ScreenUpdating = True
End Sub


Как то странно получилось. Изменил некоторые настройки в профиле и началась абра-кадабра. Когда выхожу все ок..

Пришлось перерегистрироваться. Может у кого было подскажите как все вернуть обратно.


при выборе кассы должна отображаться только выбранная касса или с первой по выбранную?


cheshiki1 Все получилось. Спасибо большое.


Добрый день. Здесь обсуждается вопрос, над которым я как раз ломаю голову, авось поможете.
На первом листе есть выпадающий список от 1 до 10, на втором листе должен работать макрос, который в зависимости от числа, которое в списке первого листа, будет скрывать строки в таблицах. То есть, если в списке число 1- значит в таблицах должно остаться по 1 строке, если в списке число 4, то соответственно должно остаться по 4 строки. Помогите пожалуйста, совсем сил нет уже.  :)


Private Sub Worksheet_Change(ByVal Target As Range)
Dim R%
Application.ScreenUpdating = False
If Target.Address <> "$A$1" Then Exit Sub
With Sheets("Лист2")
  If Target = "" Then
  .Rows("1:100").EntireRow.Hidden = False
  Else
  .Rows("1:100").EntireRow.Hidden = False
     For i = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If .Cells(i, 1) > Target And .Cells(i, 1) <> "" Then .Cells(i, 1).EntireRow.Hidden = True
     Next
  End If
End With
Application.ScreenUpdating = True
End Sub


Огромное вам спасибо.  :)


Доброго времени суток. Снова вынужден просить о помощи(.
Использую код для скрытия строк относительно числа в ячейке. Если число в ячейке просто прописано(в моём случае это список от1 до 10), то код работает. Если же число выводится посредством формулы(необходимо считать количество заполненных строк в таблице и относительно результата скрывать лишние строки), код работать отказывается. Можно ли заставить VBA работать относительно ячейки, с обновляемым значением?
Собсно код:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R%
Application.ScreenUpdating = False
If Target.Address <> "$A$1" Then Exit Sub
With Sheets("Лист2")
  If Target = "" Then
  .Rows("1:100").EntireRow.Hidden = False
  Else
  .Rows("1:100").EntireRow.Hidden = False
     For i = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If .Cells(i, 1) > Target And .Cells(i, 1) <> "" Then .Cells(i, 1).EntireRow.Hidden = True
     Next
  End If
End With
Application.ScreenUpdating = True
End Sub

Возможно есть не очень сложное решение этого вопроса? Заранее благодарен.
С ув. athe.


Прошу меня извинить за глупые вопросы. «Ларчик просто открывался»:

If Target.Value = "" Then...

13:31
Нет, я ошибся. Не работает. Вопрос актуален.


пробуйте


Private Sub Worksheet_Change(ByVal Target As Range)
Dim R%
Application.DisplayAlerts = False
Application.ScreenUpdating = False
If Not (Intersect(Target, Union(Me.Range("A1"), Me.Range("A1").Precedents)) Is Nothing) Then
With Sheets("Лист2")
  If Target = "" Then
  .Rows("1:100").EntireRow.Hidden = False
  Else
  .Rows("1:100").EntireRow.Hidden = False
     For i = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If .Cells(i, 1) > Target And .Cells(i, 1) <> "" Then .Cells(i, 1).EntireRow.Hidden = True
     Next
  End If
End With
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

файл не смотрел.


cheshiki1
Спасибо за отклик. Код работает, но к сожалению не так, как нужно. У меня значение [A1] высчитывается формулой:

=10-счётесли(Лист2!B3:B12;0)
Увы, строки при этом не скрываются. Я также пробовал добывать [A1] из таблицы, которая не участвует в макросе, но эффект был такой же.
  Интересным образом программа работает если значение [A1] считается суммой двух ячеек. Учитывается не сумма, а значения слагаемых.
  При попытке изменить ячейку в листе 1 программа ругается на эту строку:

If Not (Intersect(Target, Union(Me.Range("A1"), Me.Range("A1").Precedents)) Is Nothing) Then

Спасибо.
С ув. athe.


Вот что значит файл не посмотрел. :) Та строка не работает если в формуле ссылка на другой лист.
пробуйте это

Private Sub Worksheet_Calculate()
Static v As Variant
Application.Calculation = xlManual
Application.ScreenUpdating = False
If Me.Range("A1").Value <> v Then
    With Sheets("Ëèñò2")
       If Cells(1, 1) = "" Then
         .Rows("1:100").EntireRow.Hidden = False
       Else
         .Rows("1:100").EntireRow.Hidden = False
         For i = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
            If .Cells(i, 1) > Cells(1, 1) And .Cells(i, 1) <> "" Then .Cells(i, 1).EntireRow.Hidden = True
         Next
      End If
    End With
    v = Me.Range("A1").Value
End If
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub


cheshiki1, спасибо вам большое. Всё отлично работает.  :) Теперь отчёты потекут рекой).


Добрый день.
Прошу прощения за поднятие старой темы.
Успешно использую вышеуказанный код, за что благодарен участникам форума.
Я попытался использовать его для несколько иной задачи, но, увы ничего не вышло. Необходимо скрывать тот или иной диапазон строк в зависимости от значения в списке. Для этого в столбце А вместо чисел я прописал формулы: «=ЕСЛИ(Лист_1!I8=draft!A1;1;2)». Себто, если значение в ячейке соответствует таблице №1, то в столбце А, возле таблицы №1 будет значение 1 (таблица видима), а напротив остальных таблиц будет значение 2 (таблица скрыта).
Код к сожалению срабатывает только один раз, после чего не реагирует на изменения значения в списке. Если войти и выйти в режим конструктора, — программа снова может сработать один раз. Подскажите пожалуйста, в чём может быть загвоздка?
Заранее благодарен,
athe

Собсно код:

Private Sub Worksheet_Calculate()
Static v As Variant
Application.Calculation = xlManual
Application.ScreenUpdating = False
If Me.Range("A1").Value <> v Then
    With Sheets("Лист_1")
       If Cells(1, 1) = "" Then
         .Rows("1:1000").EntireRow.Hidden = False
       Else
         .Rows("1:1000").EntireRow.Hidden = False
         For i = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
            If .Cells(i, 1) > Cells(1, 1) And .Cells(i, 1) <> "" Then .Cells(i, 1).EntireRow.Hidden = True
         Next
      End If
    End With
    v = Me.Range("A1").Value
End If
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub


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

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$I$8" Then Exit Sub
Dim i As Long
Application.Calculation = xlManual
Application.ScreenUpdating = False

With Sheets("Лист_1")
     .Rows("1:1000").EntireRow.Hidden = False
         For i = .Cells(Rows.Count, 1).End(xlUp).Row To 12 Step -1
            If .Cells(i, 1) <> 1 Then .Cells(i, 1).EntireRow.Hidden = True
         Next
End With

Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Как скрыть строки при условии без применения фильтра

Макрос на скрытие строк по условию

Irokezx

Дата: Воскресенье, 30.07.2017, 15:40 |
Сообщение № 1

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

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

Сообщений: 4


Репутация:

0

±

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


Excel 2013

Добрый день, уважаемые форумчане!

Выкладываю пример макроса для решения следующей задачи (см. файл-пример): автоматически скрывать/показывать строки при проверке условия в ячейках B8:B19 (List1).

[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range) ‘Задаём событие, при котором запускается макрос
Application.ScreenUpdating = False ‘Отключаем обновление экрана во время выполнения макроса
Dim i& ‘Объявляем переменную
For i = 8 To 19 ‘Указываем диапазон цикла, в данном случае по номерам строк
If Range(«B» & i).Value = «» Then ‘Проверяем, пустые ли ячейки, соответствующие указанному выше диапазону, в интересующем столбце («B»)
Rows(i).EntireRow.Hidden = True ‘Скрываем строки, если эти ячейки пустые
Else: Rows(i).EntireRow.Hidden = False ‘Отображаем строки, если ячейки заполнены
End If ‘Закрываем конструкцию проверки указанных условий
Next ‘Запускаем описанную выше процедуру для каждого значения переменной из указанного диапазона цикла
End Sub

[/vba]

Собственно макрос работает, но у меня возник ряд вопросов, связанный с теоретической частью VBA (уровень моих знаний около нулевой отметки):

1) Соответствует ли содержимое моих комментариев после знака апострофа (см. тело макроса) правильному описанию выполняемой процедуры?
2) Было бы интересно посмотреть более рациональные (Ваши) варианты решения для этой задачки с использованием VBA-кода, если они существуют.
3) Чем отличаются между собой макросы типов Sub/Private Sub/Public Sub? Если я правильно понял, процедуру Private Sub можно запустить только из модуля, в котором он прописан (т.е. в моём случае это List1), тогда как процедуру Sub возможно выполнить из любой части рабочей книги. Разницу между Sub и Public Sub понять не могу.
4) Есть ли возможность написания аналогичного макроса, при условии проверки несмежных диапазонов листа? Полагаю, это можно осуществить в одном коде путём обозначения нескольких переменных и перечисления для каждой условия проверки. На этот вопрос участников форума прошу на текущий момент не выкладывать готовое решение. Хочется увидеть ответ в формате Есть/Нет и Правильный/Неправильный ход мысли.

 

Ответить

_Boroda_

Дата: Воскресенье, 30.07.2017, 16:16 |
Сообщение № 2

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

1. Если не сильно придираться к определениям, то да

2. Для небольших объемов все нормально. Для больших — Вы независимо от того, скрыта ячейка или нет, все равно с ней что-то делаете. Зачем, если Вам нужно скрыть, а она уже скрыта? Или наоборот — открыть, а она уже открыта (кстати, как у Вас может быть заполнена ячейка, если перед этим она скрыта была? Её ж для этого открыть нужно). По возможности к листу нужно как можно меньше обращаться — сильно влияет на скорость. Поэтому я бы написал что-то типа:
Сначала всё открываем[vba]

Код

Rows(«8:19»).EntireRow.Hidden = False

[/vba]потом пробегаемся по ячейкам и собираем их адреса в одну кучу. А потом что-то типа
[vba]

Код

Range(«B6:B7,B9,B11,B14,B16,B18:B20,B22»).RowHeight = 0

[/vba]
Можно и не пробегаться циклом. Если ячеек не очень много (могу ошибаться, вроде до 2^13 = 8192) и там действительно реально пусто, а не результат формулы «», то прокатит вот так
[vba]

Код

Range(«B8:B19»).SpecialCells(xlCellTypeBlanks).RowHeight = 0

[/vba]
И Application.ScreenUpdating нужно возвращать в True. Теоретически он возвращается сам, но здесь на форуме с год назад была тема про тормоза макроса (сейчас искать не буду — долго), где лечение заключалось как раз в этом.

3. В общих чертах, не придираясь к конкретным словам, да, все верно. Sub по умолчанию означает Public Sub. В этом отличие от переменных, которые по умолчанию Private

4. См. п.2

Файл не смотрел


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

 

Ответить

Irokezx

Дата: Вторник, 01.08.2017, 02:05 |
Сообщение № 3

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

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

Сообщений: 4


Репутация:

0

±

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


Excel 2013

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

 

Ответить

Содержание

  1. Сдвигаем границу строки
  2. Одновременное скрытие нескольких строк
  3. Используем контекстное меню
  4. Применяем кнопки на ленте
  5. Группировка
  6. Панель инструментов
  7. Фильтр
  8. С помощью возможностей «Условное форматирование»
  9. Настройка правильных параметров в «Настройках» программы
  10. При помощи настроек цвета и параметров печати
  11. Скрытие помеченных строк/столбцов макросом
  12. Скрытие строк/столбцов с заданным цветом
  13. Выборочная защита диапазонов для разных пользователей
  14. Защита листов книги
  15. Блокировка через рецензирование
  16. Заморозка ячейки
  17. Закрепление области
  18. Фиксация формулы в Excel по вертикали
  19. Полезные советы
  20. Как скрыть формулу заблокированной ячейки
  21. Снимаем защиту
  22. Заключение

Сдвигаем границу строки

Данный метод, пожалуй, является самым простым. И вот, в чем он заключается.

  1. На вертикальной координатной панели наводим указатель мыши на нижнюю границу строки, которую планируем скрыть. Когда появится знак в виде плюсика со стрелками вверх и вниз, зажав левую кнопку мыши тянем его вверх, соединив с верхней границей строки.
  2. Таким нехитрым способом нам удалось скрыть выбранную строку.

Одновременное скрытие нескольких строк

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

  1. На вертикальной координатной панели любым удобным способом (например, с помощью зажатой левой кнопки мыши) выделяем строки, которые планируем спрятать.Если требуется выделить разрозненные строки, выполняем выделение левой кнопкой мыши (щелчком или зажав для идущих подряд строк), удерживая клавишу Ctrl на клавиатуре.
  2. Аналогично скрытию одной строки (действия описали в методе выше), сдвигаем границу любой строки из выделенного диапазона. При этом неважно, тянем ли мы указатель к верхней границе именно этой строки или к границе самой верхней строки отмеченной области.
  3. В итоге мы скрыли сразу весь выделенный диапазон.

Используем контекстное меню

Наверное, это самый популярный способ среди пользователей, который предполагает использование контекстного меню.

  1. На вертикальной панели координат выделяем нужные строки (как это сделать, описано выше).
  2. Щелкаем правой кнопкой мыши по любому месту в выделенном диапазоне на координатной панели, в открывшемся списке выбираем команду “Скрыть”.
  3. Весь выделенный диапазон строк будет спрятан.

Применяем кнопки на ленте

На ленте программы также, предусмотрены кнопки для скрытия строк.

  1. Для начала нужно выделить строки, которые мы планируем спрятать. Сделать это можно по-разному:
  2. Находясь во вкладке “Главная” в группе инструментов “Ячейки” щелкаем по кнопке “Формат”. В открывшемся перечне выбираем команду “Скрыть или отобразить”, затем – “Скрыть строки”.
  3. Получаем скрытый диапазон строк.

Группировка

Чтобы скрыть ячейки с плюсом, необходимо воспользоваться специальным инструментом Excel – группировка. Он расположен во вкладке Данные на Панели инструментов в блоке Структура.

Порядок действий следующий:

  1. Выделяете необходимую область

  1. Переходите во вкладку Данные и нажимаете кнопку Группировать.

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

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

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

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

Панель инструментов

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

Чтобы отобразить ячейки обратно, выбираете в том же меню функцию Отобразить строки или столбцы, в зависимости от того, что скрывалось.

Фильтр

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

Нажав на этот флажок, убираете галочки с нужных позиций, затем подтверждаете действие кнопкой ОК.

Таблица приняла другой вид, а о применении фильтрации свидетельствует синий цвет номеров строк и небольшая воронка вместо стрелочки.

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

С помощью возможностей «Условное форматирование»

Для того чтобы узнать, как скрыть значение ячеек также можно использовать возможности «Условного форматирования». Для этого нам нужно выделить диапазон ячеек, где мы будем скрывать значения с нулевым результатом. Выбираем вкладку «Главная», блок «Стили», нажимаем иконку «Условное форматирование», в списке который раскрылся, выбираете «Правила выделение ячеек – Равно…». Следующим этапом станет указать какой именно формат вам будет надо, в поле «Форматировать ячейки, которые РАВНЫ:» устанавливаете значение 0. В открывшемся списке выбираете «Пользовательский формат…»,

в диалоговом окне «Формат ячеек» переходим на вкладку «Шрифт», потом в списке меню «Цвет» вы изменяете «Цвет темы: Авто» на «Цвет темы: Белый, Фон 1» и нажимаете «ОК» и снова «ОК».

После ваших манипуляций, если значение в указанном диапазоне будет равно 0, программа закрасит его белый цвет, и оно сольется с фоном листа, проще говоря станет невидимым.

В случае, когда вам будет нужно первоначальное форматирование, вы просто удаляете это правило. А именно: переходите на вкладку «Главная», выбираете «Стили», кликаете на иконку «Условное форматирование», нажимаете «Удалить правило» и «Удалить правила из выделенных ячеек».

Настройка правильных параметров в «Настройках» программы

Скрыть в Excel значение ячеек можно даже проще, всего на всего установить нужный вам параметр в настройках листа Excel.

Для этого вы заходите в меню «Файл» — пункт «Параметры» — пункт «Дополнительно» — раздел показать параметры для следующего листа. Здесь в параметре «Показывать нули в ячейках, которые содержат нулевые значения» вы убираете галочку. Вуаля! Числа со значением 0 не показываются на том листе, для которого был установлен параметр.

При помощи настроек цвета и параметров печати

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

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

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

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

Теперь откроем редактор 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).

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

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

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 или старше, то придется придумывать другие способы.

Выборочная защита диапазонов для разных пользователей

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

Чтобы сделать это выберите на вкладке Рецензирование (Review) кнопку Разрешить изменение диапазонов (Allow users edit ranges). В версии Excel 2003 и старше для этого есть команда в меню Сервис – Защита – Разрешить изменение диапазонов (Tools – Protection – Allow users to change ranges):

В появившемся окне необходимо нажать кнопку Создать (New) и ввести имя диапазона, адреса ячеек, входящих в этот диапазон и пароль для доступа к этому диапазону:

Повторите эти действия для каждого из диапазонов разных пользователей, пока все они не окажутся в списке. Теперь можно нажать кнопку Защитить лист (см. предыдущий пункт) и включить защиту всего листа.

Теперь при попытке доступа к любому из защищенных диапазонов из списка, Excel будет требовать пароль именно для этого диапазона, т.е. каждый пользователь будет работать “в своем огороде”.

Защита листов книги

Если необходимо защититься от:

  • удаления, переименования, перемещения листов в книге
  • изменения закрепленных областей (“шапки” и т.п.)
  • нежелательных изменений структуры (сворачивание строк/столбцов при помощи кнопок группировки “плюс/минус”)
  • возможности сворачивать/перемещать/изменять размеры окна книги внутри окна Excel

то вам необходима защита всех листов книги, с помощью кнопки Защитить книгу (Protect Workbook) на вкладке Рецензирование (Reveiw) или – в старых версиях Excel – через меню Сервис – Защита – Защитить книгу (Tools – Protection – Protect workbook):

Блокировка через рецензирование

Есть ещё метод поставить блок на нужные ячейки программы Excel. Оба метода очень похожи, различия только в разных меню, где мы будем блокировать документ.

  • Проделываем то же, что мы делали в пунктах 1 – 3, то есть убираем и ставим галочку над «Защищаемой ячейкой».
  • Теперь, перейдем в верхнее меню «Рецензирование». Примерно в середине этого меню мы видим команду «Защитить лист». Нажмём на эту кнопку.
  • Затем, мы видим вновь окошко «Защита листа», как в верхнем методе. Далее, поступаем также, как до этого по аналогии.

Заморозка ячейки

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

  1. Закрепление верхней строки.
  2. Заморозка левого крайнего столбца.
  3. Закрепление области, находящейся сверху и слева от выделенной ячейки.

Закрепление области

Если вы хотите оставить в поле зрения ряд строк и столбцов, тогда делайте следующее:

  1. Выделите ячейку, строки выше и столбцы левее которой необходимо заморозить.
  2. Перейдите во вкладку «Вид».
  3. На ленте инструментов кликните по «Закрепить области».
  4. В списке выберите опцию «Закрепить области».

Частичная фиксация по вертикали (пример $A1), это закрепления возможно только для столбцов, вероятность сдвига формулы частично сохраняется, но только по горизонтали (в строке). Как видно со скриншота или скачанного вами файла с примером.

Полезные советы

  • Ячейки, которые необходимо заблокировать, находятся на удалении друг от друга? Excel 2016 и версии до 2007 включительно позволяют выделять их не вручную, а автоматически.
    Для этого во вкладке «Главная» в одном из самых последних полей под названием «Редактирование» нажмите кнопку «Найти и выделить». Выберите пункт «Выделение группы ячеек…»

И установите нужные настройки:

Как скрыть формулу заблокированной ячейки

Если ячейки, которые вы защитили от редактирования содержат формулы, вы также можете их скрыть.

Для этого проделайте следующие шаги:

  • Выделите ячейки, которые вы хотите защитить и скрыть формулы;
  • Перейдем на вкладку “Главная” на панели инструментов и в подразделе “Выравнивание” кликнем по иконке в правом нижнем углу, как мы делали это раннее;
  • Во всплывающем окне, на вкладке “Защита” поставим галочки в пунктах “Защищаемая ячейка” и “Скрыть формулы“:

Снимаем защиту

Если мы попытаемся внести изменения в любую из защищенных ячеек, программа выдаст соответствующе информационное сообщение.

Для снятие блокировки необходимо ввести пароль:

  1. Во вкладке “Рецензирование” в группе инструментов “Защита” жмем кнопку “Снять защиту с листа”.
  2. Откроется небольшое окошко с одним полем, в котором следует ввести пароль, указанный при блокировке ячеек. Нажав кнопку OK мы снимем защиту.

Заключение

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

Источники

  • https://MicroExcel.ru/skrytie-strok-yacheek/
  • https://mir-tehnologiy.ru/kak-skryt-yachejki-v-excel/
  • https://topexcel.ru/kak-skryt-v-excel-znachenie-yacheek/
  • https://www.planetaexcel.ru/techniques/2/121/
  • https://www.planetaexcel.ru/techniques/5/66/
  • https://info-kibersant.ru/kakzaschitit-excel-ot-izmeneniy-html.html
  • https://FB.ru/article/414058/dva-varianta-kak-zamorozit-yacheyku-v-excel
  • https://topexcel.ru/prostoj-sposob-zafiksirovat-znachenie-v-formule-excel/
  • https://profi-user.ru/zashhita-yacheek-ot-redaktirovaniya-v-excel/
  • https://excelhack.ru/kak-zaschitit-yacheiku-ot-izmenenii-v-excel/
  • https://MicroExcel.ru/zashita-yacheek/

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как скрывать ячейки в excel 2010
  • Как скрыть все исправления в word
  • Как скрывать ячейки excel vba
  • Как скрыть все заметки в excel
  • Как скрывать часть таблицы в excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии