Скрывать строки в excel при условии

Предположим, у вас есть диапазон данных, и вы хотите скрыть строки на основе значения столбца, например, если значение ячейки столбца меньше 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% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

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

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

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

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

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

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

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

В 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. Изменение выделения в поле со списком. Строк в повторяющейся таблице будут отображаться и больше не будут отображаться при выборе различных параметров.

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

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

  • honor8

Как в excel скрывать несколько строк, их ячейки либо пустые либо =»» ?

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

т.е. сейчас должны стать скрытыми полностью строки 16:29
потому что последняя заполненная строка 15 (ячейка E15)
и чтобы строки 16:29 на принтере не печатались

т.е. должны быть автоматически скрыто (м.б. по умному фильтр настроить?)
Внимание! Ячейки диапазона строк 5:29 могут содержать формулы

Файл https://yadi.sk/i/FPqZazjymfSCwQ

5c864b640f27d345561796.png


  • Вопрос задан

    более трёх лет назад

  • 3144 просмотра

Нашёл решение. Для каждого листа где нужно убирать строки, делаем следующее:
1. Сделать невидимые формулы справа от основного содержания листа, которые проверяют являются ли ячейки из столбцов b и e одновременно пустые, например, =ЕСЛИ(И(B19="";E19=""); ""; 1). И сделать фильтр по пустым ячейкам
2.создать макрос в каждом листе где есть фильтр, который автоматически обновляет фильтр:

Private Sub Worksheet_Activate()

ActiveSheet.AutoFilter.ApplyFilter

End Sub

В последнее время я сам нахожу ответы на свои вопросы.

Пригласить эксперта

Просто отфильтруй пустые ячейки (см. скриншот).5c864fcdc3bb8427355873.png

Выдели строки целиком, потом прав. клик на выделениии, команда «скрыть»


  • Показать ещё
    Загружается…

17 апр. 2023, в 02:32

5000 руб./за проект

17 апр. 2023, в 01:56

1200 руб./в час

17 апр. 2023, в 01:43

20000 руб./за проект

Минуточку внимания

Фильтрация данных

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

Для включения/выключения фильтрации данных используйте кнопку «Фильтрация», расположенную в группе «Анализ» на вкладке «Таблица» ленты инструментов. Раскрывающееся меню кнопки предназначено для настройки условий фильтрации (фильтров):

  • Отключить. Установка флажка отключает фильтрацию данных;

  • флажки, соответствующие различным фильтрам:

    • Скрыть пустые строки и столбцы. Скрываются столбцы и строки, не содержащие никаких данных;

    • Скрыть строки и столбцы с нулевыми значениями. Скрываются столбцы и строки, содержащие только нулевые значения;

    • Скрыть строки и столбцы с нечисловыми значениями. Скрываются строки и столбцы, содержащие только нечисловые значения;

    • Скрыть строки и столбцы по условию. Фильтр не реализован.

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

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

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

Доступные условия

    • равные А;

    • не равные А;

    • больше А;

    • меньше А;

    • большие или равные А;

    • меньшие или равные А;

    • между А и В включительно;

    • меньшие А или большие В.

    • Скрыть. Группа служит для настройки параметров скрытия ячеек. Если флажок установлен, то соответствующий тип ячеек будет скрыт. Возможно скрыть: нулевые, нечисловые, пустые ячейки;

    • Оставлять владельцев нескрытых элементов. Установка флажка позволяет оставлять в «отфильтрованной» таблице владельцев (родителей) элементов, не отвечающих условию фильтрации, даже если их собственные значения удовлетворяют условию фильтрации;

    • Область действия. Группа служит для указания области таблицы, к которой будет применяться фильтрация:

      • Область применения. Диапазон ячеек таблицы, предназначенных для фильтрации. Возможные варианты: фильтрация в рамках всей таблицы либо в рамках выделенной области;

      • Область действия. Ячейки в заданном диапазоне, предназначенные для фильтрации. Возможные варианты: фильтрация только строк, фильтрация только столбцов, фильтрация строк и столбцов.

См. также:

Работа с таблицей данных

макрос удалит на листе все строки, в которых содержится искомый текст:

(пример — во вложении ConditionalRowsDeleting.xls)

Sub УдалениеСтрокПоУсловию()
    Dim ra As Range, delra As Range, ТекстДляПоиска As String
    Application.ScreenUpdating = False    ' отключаем обновление экрана

    ТекстДляПоиска = "Наименование ценности"    ' удаляем строки с таким текстом

    ' перебираем все строки в используемом диапазоне листа
    For Each ra In ActiveSheet.UsedRange.Rows
        ' если в строке найден искомый текст
        If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
            ' добавляем строку в диапазон для удаления
            If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
        End If
    Next
    ' если подходящие строки найдены - удаляем их
    If Not delra Is Nothing Then delra.EntireRow.Delete
End Sub

Чтобы вместо удаления просто скрыть такие строки, замените строку

If Not delra Is Nothing Then delra.EntireRow.Delete

на

If Not delra Is Nothing Then delra.EntireRow.Hidden=TRUE

Расширенная версия этого макроса — с использованием UserForm для ввода искомого значения

Function ПоискСтрокПоУсловию(ByVal ТекстДляПоиска As String, Optional HideOnly As Boolean) As Long
    ' функция получает в качестве параметра ТекстДляПоиска (можно использовать символы * и ?)
    ' Если HideOnly = TRUE, то строки, содержащие в ячейках ТекстДляПоиска, скрываются,
    ' иначе (HideOnly = FALSE - по умолчанию) - удаляются
    ' Функция возвращает количество удалённых строк
    Dim ra As Range, delra As Range
    Application.ScreenUpdating = False    ' отключаем обновление экрана

    ' перебираем все строки в используемом диапазоне листа
    For Each ra In ActiveSheet.UsedRange.Rows
        ' если в строке найден искомый текст
        If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
            ' добавляем строку в диапазон для удаления
            If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
        End If
    Next
    On Error Resume Next: ПоискСтрокПоУсловию = delra.Areas.Count ' количество найденных строк
    
    If Not delra Is Nothing Then    ' если подходящие строки найдены - скрываем или удаляем их
        If HideOnly Then delra.EntireRow.Hidden = True Else delra.EntireRow.Delete
    End If
End Function

Ещё один вариант кода, позволяющего выполнять поиск (с последующим удалением или скрытием строк) сразу по нескольким условиям:

Sub УдалениеСтрокПоНесколькимУсловиям()
    Dim ra As Range, delra As Range
    Application.ScreenUpdating = False    ' отключаем обновление экрана

    ' ищем и удаляем строки, содержащие заданный текст
    ' (можно указать сколько угодно значений, и использовать подстановочные знаки)
    УдалятьСтрокиСТекстом = Array("Наименование *", "Количество", _
                                  "текст?", "цен*сти", "*78*")
 
    ' перебираем все строки в используемом диапазоне листа
    For Each ra In ActiveSheet.UsedRange.Rows
        ' перебираем все фразы в массиве
        For Each word In УдалятьСтрокиСТекстом
            ' если в очередной строке листа найден искомый текст
            If Not ra.Find(word, , xlValues, xlPart) Is Nothing Then
                ' добавляем строку в диапазон для удаления
                If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
            End If
        Next word
    Next
 
    ' если подходящие строки найдены, то: (оставьте одну из 2 следующих строк)
    If Not delra Is Nothing Then delra.EntireRow.Hidden = True    ' скрываем их
    If Not delra Is Nothing Then delra.EntireRow.Delete    ' удаляем их
End Sub

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

Автор 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

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

Понравилась статья? Поделить с друзьями:
  • Скрывать содержимое ячеек excel
  • Скрываемые диапазоны в excel
  • Скрипт сохранить как в excel
  • Скрывать рисунок в excel
  • Скругленная рамка в word