Предположим, у вас есть диапазон данных, и вы хотите скрыть строки на основе значения столбца, например, если значение ячейки столбца меньше 3000, затем скройте строку ячейки, как показано ниже.
В Excel вы можете использовать функцию «Фильтр» для фильтрации и скрытия строк на основе значения ячейки.
1. Выберите данные, которые нужно отфильтровать, и нажмите Данные > Фильтр. Смотрите скриншот:
2. Затем щелкните стрелку вниз, чтобы отобразить раскрывающийся список фильтров, и щелкните Числовые фильтры (или текстовые фильтры) > Больше чем (вы можете выбрать другой критерий в подменю). Смотрите скриншот:
3. В появившемся диалоговом окне введите критерий в текстовое поле рядом с больше чем. Смотрите скриншот:
4. Нажмите OK. Теперь отображаются только данные, превышающие 3000, а строки, данные которых меньше 3000, скрыты.
Более того, если вас интересует код 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, затем выберите диапазон данных, в котором вы хотите скрыть строки в всплывающем диалоговом окне (за исключением заголовков). Смотрите скриншот:
4. Нажмите OK, и введите номер критерия во втором диалоговом окне. Смотрите скриншот:
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. Выберите диапазон данных и нажмите Кутулс > Выберите > Выбрать определенные ячейки. Смотрите скриншот:
2. в Выбрать определенные ячейки диалог, проверьте Весь ряд под Тип выбора раздел, затем выберите нужный критерий из Конкретный тип список, затем введите число или текст в текстовое поле. Смотрите скриншот:
3. Нажмите Ok > OK закрыть диалоги. Теперь выбираются строки, данные которых меньше 3000, и вам просто нужно щелкнуть правой кнопкой мыши заголовок строки, чтобы отобразить контекстное меню, и выбрать «Скрыть». Смотрите скриншот:
Теперь строки, данные которых меньше 3000, скрыты.
Наконечник:
1. Если вы хотите скрыть строки, содержащие определенное значение, вы можете выбрать Комплект и введите определенное значение в текстовое поле.
2. Если вы хотите скрыть строки, которые содержат значения больше, но меньше значений, вы можете выбрать Больше и Менее, затем введите значения в два поля и установите флажок И,.
Работы С Нами Kutools for ExcelАвтора Выбрать определенные ячейки утилита, вы можете определить расположение определенных ячеек, выбрать целые строки или столбцы на основе значения ячейки и так далее. Щелкните здесь, чтобы узнать больше об этой утилите.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
скрыть/отобразить строки в зависимости от значения в ячейке |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Как в Эксель (Excel) удалить строки по условию?
Как в Excel быстро удалить строки, содержимое которых удовлетворяет определённому условию?
Это удобно сделать с помощью фильтра.
Имеем таблицу данных с заголовком.
Щелкаем на любом месте в заголовке и выбираем на Главной вкладке пункт «Сортировка и фильтр — фильтр».
Фильтруем содержимое таблицы по требуемым условиям, по одному или нескольким столбцам.
Оставшиеся после применения фильтра ячейки / строки выделяем все вместе и выбираем пункт «Удалить строки с листа» (можно выбрать пункт «Удалить — строку» в меню после щелчка правой кнопкой мыши на выделенной ячейке).
Удалились именно те строки, которые были отфильтрованы, остальные остались на месте (нужно убрать все фильтры, чтобы их увидеть).
Я знаю 2 способа, позволяющих удалить определённые строки в Эксель (Excel).
1 способ — с помощью фильтра.
2 способ — с помощью VBA.
Расскажу о каждом способе подробно.
Если это делать с помощью фильтра, то порядок действий такой:
1) Отбираем нужные строки.
3) Убираем фильтр.
В результате в таблице останется только то, что нужно.
В таблице содержаться сведения о товарах и странах-производител ях, нужно оставить только импортные товары (то есть удалить строки, где содержится «Россия»).
1) Так как нас интересуют строки с определённым значением, то можно поставить фильтр так:
Щёлкнуть по любой ячейке с надписью «Россия» правой кнопкой мыши, а затем в контекстном меню выбрать пункт «Фильтр по значению выделенной ячейки».
2) В итоге останутся видимыми только те строки, которые требуется удалить.
Выделяем все строки и щёлкаем по выделенному правой кнопкой мыши, в контекстном меню выбираем «Удалить строки».
3) Строки удалятся, и таблица будет пустой (так как там пока стоит фильтр).
4) Снимаем фильтр с помощью кнопки на панели инструментов «Сортировка и фильтр».
Теперь можно убедиться, что в таблице остались строчки с только импортными товарами.
Нужно оставить только фрукты, стоящие > 100 рублей.
Здесь фильтр по значению ячейки уже не подойдёт, поэтому поступаем по-другому:
1) Щёлкаем левой кнопкой мыши по любой ячейке столбца с ценой и вызываем фильтр — с помощью копки «Фильтр» на вкладке «Данные» или с помощью копки «Сортировка и фильтр» на вкладке «Главная».
2) Теперь щёлкаем по специальной стрелочке на столбце с ценой, и выбираем «Числовые фильтры» -> «Меньше».
3) В появившемся окне вводим 100 и нажимаем на «OK».
4) Останутся строки с ценой < 100.
5) Теперь так же, как и в 1 примере, удаляем их и убираем фильтр.
В результате в таблице будут только те товары, у которых цена > 100.
Для удаления строк по определённому условию в VBA можно написать цикл, в котором перебираются все строки и одна (несколько) ячеек сравниваются с определённым значением.
Если условие выполняется, тогда удаляем строку с помощью команды Delete.
Создаём кнопку и привязываем к ней код (это самое простое, что можно придумать):
Dim i As Integer
If Cells(i, 3) < 100 Then Rows(i).Delete
Понятно, что если строчек будет не 10, а, например, 100, то цикл будет идти от 1 до 100.
В объекте Cells(i, 3) стоит цифра 3, так как проверяются данные у 3 по счёту столбца.
Но этот код всё же не идеален и некоторые строчки в цикле пропускаются (так как после команды Delete они смещаются) — придётся нажимать на кнопку не один раз, а несколько.
Чтобы удалить определенные строки в Excel, нажмите «надстройки» и под меню «главная» будет маленькое окошко, надо нажать на него, выпадет меню «удаление/скрытие ячеек по умолчанию», отмечаем строку «ячейки с текстом», под этой строкой есть пустая, туда вводим текст, который должен быть в удаляемых ячейках, далее выбираем «в диапазоне листа», если действие нужно на нескольких страницах, выбираем «в диапазоне листов», далее «удалить строки/ячейки» и нажимаем «пуск». Выпадет меню «обработка завершена», жмем «ок».
Второй вариант удаляем выделенные строки. Для этого выделим их мышью. И поступаем как в первом способе. Можно удалять ячейки со сдвигом и т.д.
Как в excel оставить только нужные строки
Как в excel оставить только нужные строки
20 секретов Excel, которые помогут упростить работу
Перемещение по файлам Excel
Как скрывать информацию в Excel
- ЛЕВСИМВ(Строка; Количество_символов) – выводит заданное количество символов с левого края. Например, =ЛЕВСИМВ(А1;10) выведет 10 первых символов строки в ячейке А1 . Функция имеет 2 обязательных аргумента – Строка-источник и количество выводимых символов;
Функция ЛЕВСИМВ в Эксель
- ПРАВСИМВ(Строка; Количество_символов) – функция схожа с предыдущей, она выводит заданное количество символов справа. То есть, =ПРАВСИМВ(А1;10) в результате выдаст 10 последних символов из строки А1 .
Функция ПРАВСИМВ в Excel
- ПСТР(Строка; Начальный_символ; Количество символов) – выбирает из текста нужное количество знаков, начиная с заданного. Например, =ПСТР(А1;5;3) выведет 3 символа начиная с 5-го (5-7 символы строки).
Функция ПСТР в Эксель
Функции, которая отрезает лишнее количество символов в ячейке, найти не удается, но существует система из двух функций, которые можно применить. Это система из функции ЛЕВСИМВ (или ПРАВСИМВ) и функции ДЛСТР (длина строки).
Microsoft Excel
Как переопределить используемую область листа в Excel
- Выберите все столбцы справа от столбца G . Для этого активизируйте любую ячейку в столбце Н , нажмите Ctrl+Пробел, затем Shift+End и в конце, удерживая нажатой Shift, нажмите клавишу →.
- Выполните команду Главная → Ячейки → Удалить → Удалить столбцы с листа (или щелкните правой кнопкой мыши на заголовке любого столбца и выберите команду Удалить).
- Выделите все строки ниже строки 25. Для этого активизируйте любую ячейку в строке 26. Нажмите Shift+Пробел, затем Shift+End и в конце, удерживая нажатой Shift, нажмите клавишу ↓.
- Выполните команду Главная → Ячейки → Удалит → Удалить строки с листа(или щелкните правой кнопкой мыши на заголовке любой строки и выберите команду Удалить).
- Сохраните книгу, и Excel переопределит последнюю ячейку.
Выделение содержимого ячеек в Excel
Как в excel оставить только нужные строки
Как в Excel отображать только строки с определенным текстом?
В Excel функция «Фильтр» широко используется в нашей повседневной работе. И в этом случае я расскажу, как фильтровать строки с определенным текстом в Excel. Например, здесь два столбца, и я хочу показать строки, содержащие «KTE», только в столбце B, как показано ниже.
Показать строки содержат определенную строку Kutools for Excel
Показать строки содержат определенную строку с помощью функции фильтра
1. Выберите используемые диапазоны и нажмите Данные > Фильтр для Фильтр функции.
2. Затем щелкните значок фильтра в столбце, по которому нужно выполнить фильтрацию, и выберите Текстовые фильтры > Комплект. Смотрите скриншот:
3. в Пользовательский автофильтр в диалоговом окне вы можете указать текст, на основе которого хотите выполнить фильтрацию. Смотрите скриншот:
Показать строки содержат определенную строку Kutools for Excel
1. Выберите данные, которые вы хотите использовать, нажмите Kutools Plus > Суперфильтр. Смотрите скриншот:
2. Затем в Суперфильтр панель, проверьте Указанный , чтобы исправить диапазон фильтрации, и укажите необходимые критерии в панели. Смотрите скриншот:
3. Нажмите Фильтр для фильтрации диапазона.
4. Затем нажмите Сохранить текущие настройки фильтра кнопка , затем появится диалоговое окно, в котором можно дать этому сценарию имя и указать диапазон применения сценария.
5. Нажмите OK, и вы можете открыть сценарий, щелкнув раскрывающееся меню> Открыть сохраненный сценарий настроек фильтра, чтобы выбрать текущий сохраненный сценарий, или нажав Управление сценариями настройки фильтров кнопка , выберите нужную настройку фильтра и нажмите Откройте чтобы в следующий раз включить настройки фильтра.
Как удалить каждую вторую строку в Excel
Возможность удаления каждой второй строки в Excel — это часто возникающая задача, решение которой не займет более 5 минут.
Видеоинструкция
Как удалить каждую вторую строку в Excel
Для выполнения этой задачи потребуется первоначально добавить новый столбец, который можно назвать «Индикатором» и добавить в первые две строчки цифры 1 и 2.
После копируем первые две ячейки, кликнув правой клавишей мыши и нажав на «Копировать» (сочетание клавиш CTRL+C).
Далее выделяем область, в которой будет происходить удаление и нажимаем кликаем правой клавишей мыши и выбираем «Вставить скопированные ячейки» (сочетание клавиш CTRL+V).
После включаем фильтр, перейдя в «Данные»-«Фильтр».
Следующим этапом кликаем на 1 и удаляем ее из показа.
Выделяем оставшиеся четные строки и при помощи правой клавиши мыши выводим меню и выбираем «Удалить строку».
Включаем показ нечетных строк.
Все готово, остались лишь нечетные строки.
Удаление каждой третьей или любой другой строки в Эксель
Сделать это можно по той же инструкции, сменив лишь начальные цифры, например, если нужно избавиться от каждой третьей строки, то необходимо использовать повторяющуюся комбинацию 1, 2, 3.
Аналогичный образом можно обрезать не только 1 но 2 ненужные строки из списка, например, 2 и 4 из 5.
dat3010 Пользователь Сообщений: 14 |
Добрый день Нужна ваша помощь Как сделать скрыть строки, если в определенную ячейку вводить значение, я разобрался, спасибо вашему форуму, но вот найти именно то что мне нужно у меня не получилось Заранее благодарен Прикрепленные файлы
|
LVL Пользователь Сообщений: 903 |
Т.е. Вы хотите чтобы макрос скрывал нужные строки при изменении значения в результате пересчета формулы? Изменено: LVL — 19.04.2013 13:54:46 |
GIG_ant Пользователь Сообщений: 3102 |
Объясните подробней. Или вам нужно скрывать только абрикосы? |
dat3010 Пользователь Сообщений: 14 |
Я сильно сократил саму таблицу, ради примера главное значение в ячейке A1, а это значения зависят еще от нескольких ячеек, не только B6 |
dat3010 Пользователь Сообщений: 14 |
#5 19.04.2013 14:39:41
именно это и нужно |
||
LVL Пользователь Сообщений: 903 |
На сколько мне известно, отследить изменение значения ячейки при пересчете формулы в ней нельзя. |
GIG_ant Пользователь Сообщений: 3102 |
Тогда сильно сокращенный макрос |
dat3010 Пользователь Сообщений: 14 |
Огромное Спасибо |
Геннадий Пользователь Сообщений: 296 |
А вот у меня не будет работать Изменено: Геннадий — 19.04.2013 15:39:41 |
GIG_ant Пользователь Сообщений: 3102 |
|
Геннадий Пользователь Сообщений: 296 |
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#12 19.04.2013 17:21:49
Скачайте конвертер — за него не штрафуют )) |
||
dat3010 Пользователь Сообщений: 14 |
Странно, но теперь не работает «отменить» (ctrl-z) функция после любого ввода данных в любую ячейку, даже на другом листе или книге, если в это же самое время время открыт файл с макросом Изменено: dat3010 — 22.04.2013 14:14:55 |
Геннадий Пользователь Сообщений: 296 |
Юрий М:Скачайте конвертер — за него не штрафуют )) |
mapk Пользователь Сообщений: 25 |
Подскажите пжлста код, как скрать строки №2-7 на второй странице, если на первой значение A1=Yes, а если значение A1=No, на второй странице скрать строки №10-15. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Скрытие (скрАтие) должно происходить по кнопке или автоматически? |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#17 28.06.2013 20:31:37 Вы не сказали, по какому условию отображать. Поэтому попробуйте так (скопируйте в модуль первого листа):
|
||
mapk Пользователь Сообщений: 25 |
#18 01.07.2013 15:16:55 Юрий М, благодарю, то что требовалось. Скажите, пжлста а что в этом коде не так, не хочет работать.
Изменено: mapk — 01.07.2013 15:29:14 |
||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
А зачем это? (A As Long) |
Hugo Пользователь Сообщений: 23253 |
Ну можно и так — тогда вызывать придётся другим кодом, указывая столбец: |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Ну да — номер, а не букву, да ещё и Long) |
mapk Пользователь Сообщений: 25 |
вот что получилось — ничего, как заставить код работать? Прикрепленные файлы
Изменено: mapk — 02.07.2013 10:55:41 |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
mapk, Вы понимаете, что пишете? Call HideMe(1) — без процедуры. Просто поместите Ваш код (цикл) в событие листа Worksheet_Change. |
mapk Пользователь Сообщений: 25 |
#24 02.07.2013 12:00:26 Юрий, Вы правы я не понимаю что пишу, поэтому и спрашиваю: так?
Изменено: mapk — 02.07.2013 12:00:39 |
||
mapk Пользователь Сообщений: 25 |
#25 02.07.2013 12:09:19 Разобрался:
Благодарю повторно. |
||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#26 02.07.2013 12:11:35 Вот без передачи параметра — сразу в модуле листа:
|
||
mapk Пользователь Сообщений: 25 |
Юрий, скажите пожалуйста, как быть в случае, когда значения 1/0 копируються из другого листа. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Не верю: скопировал ноль с другого листа, вставил — всё сработало. |
mapk Пользователь Сообщений: 25 |
Я имел ввиду есть значение переходит из другой страницы, путем: Значение в поле проврки 1/0 меняеться, но строка не скрываеться. Прикрепленные файлы
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#30 02.07.2013 13:35:28 Копирование и присвоение формулой — разные вещи. Если формулы — используйте событие листа Calculate. |
Необходим макрос для скрытия и отображения строк при условии ячейки. Например есть столбец с месяцами года. При введении в ячейку «весна», скрываются строки с месяцами весны. При изменении ячейки на «зима» скрываются строки с зимними месяцами, а весенние отображаются. При введении какого либо другого значения — скрытия не происходит.
Цитата: Dauria от 07.04.2011, 14:58
Необходим макрос для скрытия и отображения строк при условии ячейки. Например есть столбец с месяцами года. При введении в ячейку «весна», скрываются строки с месяцами весны. При изменении ячейки на «зима» скрываются строки с зимними месяцами, а весенние отображаются. При введении какого либо другого значения — скрытия не происходит.
Может все же ОЗАДАЧИТЕ нас примерчиком?!
Путей к вершине — множество. Этот один из многих!
Ну, пока Вы нас ОЗАДАЧИВАЕТЕ — набросал вот такой проектик. На скрепке.
Путей к вершине — множество. Этот один из многих!
Решил во время обеденного перерыва слегка повыпендриваться.
Сделал с именованными диапазонами на листе и массивами, в которых задаются соответствия «название»-«сезон»
При таком подходе «название»-это не обязательно название месяца, а «сезон»-не обязательно сезон года.
Вот, посмотрите кому интересно приаттаченный арховчик.
С уважением, Алексей
Ну як шо цэ «повыпендриваться», то снимаю шляпу. Копирнул себе, если Вы не против.
Путей к вершине — множество. Этот один из многих!
Да нет, Gregory, тут до идеала, ИМХО, ещё есть куда копать.
Тот же список названий месяцев в массив, наверное, можно было как-то не руками вбивать (не красиво это), а циклом по перебору номеров месяцев от 1 до 12 формулой рабочего листа получить, но я с формулами листа не очень дружу. Попробовал пару формул написать — не получилось и ввёл вручную.
Но с другой стороны, а если показывать/прятать не месяцы, а, например, названия каких-то фруктов-овощей-ягод то так универсальнее…
С уважением, Алексей
И чуть короче(аттач). Леш, а месяцы в массив:
Public Sub www()
Dim m(1 To 12) As String, i&
For i = 1 To 12
m(i) = MonthName(i)
Next
End Sub
Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771
Dauria, если надо, чтоб выбранный сезон прятался, то последняя строка:
Range(«MONTHS»).EntireRow.Hidden = False: Range([b4]).EntireRow.Hidden = True
Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771
Спасибо, Gregory, все очень замечательно. А было бы еще лучше, если бы объяснил макрос, чтобы я его смог его под себя переделать.
Ну, Серёга, так — это просто прямо в лоб и заточено только под такое порядковое расположение месяцев. При месяцах-то вряд ли, конечно, кому-то в голову придёт другой их порядок перечисления и твоё решение отсутствующего примера тоже вполне логичное.
Но моё, ИМХО, более универсальное и гибкое. Но это только ИМХО. А вот Dauria, так и не выложив пример, выбрала вариант от GWolf.
А по поводу функции MonthName(), так я просто не знал о ней
С уважением, Алексей
Леш, при любом расположении месяцев в моем примере все зависит от того, как задать имена диапазонам.
Цитата: Alex_ST от 09.04.2011, 18:20
А вот Dauria, так и не выложив пример, выбрала вариант от GWolf.
Кажись не выбрала а выбрал
Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771
Цитата: Dauria от 09.04.2011, 12:59
Спасибо, Gregory, все очень замечательно. А было бы еще лучше, если бы объяснил макрос, чтобы я его смог его под себя переделать.
Доброго дня!
Поскольку данный сайт просматривают и неавторы данных топиков, то выкладываю макрос с пояснениями прямо сюда. Может объясник кривовато, но как смог. Если где-то ошибся, а кто-то заметил: — Поправте, пожалуйста. Спасибо!
Private Sub Worksheet_Change(ByVal Target As Range)
Dim blok As Range '- переменная для хранения интервала параметров
Dim cl As Range '- переменная для текущего значения параметра
'Начнем с того, что код выполнятся будет, только при изменении значения в ячейке "C3"
If Target.Address(ReferenceStyle:=xlR1C1) = "R2C3" Then
'теперь посмотрим это самое изменение, если оно = "", то и выполнять нестоит
If Target.Text = "" Then Exit Sub
'ну а если все же введено непустое значение, то _
для текущей активной книги и ее активного листа
With ThisWorkbook.ActiveSheet
'загрузим в переменную blok значения интервала "B4:B15"
Set blok = .Range(Cells(4, 2), Cells(15, 2))
'теперь перебираем значения из blok
For Each cl In blok
'и если высота строки = 0, то
If Rows(cl.Row).RowHeight = 0 Then
'установим высоту строки = 12.75
Rows(cl.Row).RowHeight = 12.75
End If
Next
'открыв т.о. все значения диапазона blok, займемся основной задачей: - посмотрим, _
что же хочет пользователь: - Какое значение он ввел в ячейку определения парамет- _
ра "Время года":
Select Case Target.Text '- Какое значение он ввел в ячейку определения параметра "Время года":
'ПОСКОЛЬКУ, ДЛЯ ВСЕХ ВРЕМЕН ГОДА _
СПОСОБ ДАЛЬНЕЙШИХ ДЕЙСТВИЙ ОДИНА- _
КОВ, ПОКАЖЕМ НА ВРЕМЕНИ ГОДА "Зима"
Case "Зима", "зима", "ЗИМА" '- в ячейку введено "Зима" (в разных вариантах возможного написания)
'перебираем значения из blok
For Each cl In blok
'и если, очередное значение из blok = "Январь" или "Февраль" или "Декабрь"
If cl <> "Январь" And cl <> "Февраль" And cl <> "Декабрь" Then
' то высоту строки с номером cl.Row, делаем = 0. Собственно И ВСЕ!
Rows(cl.Row).RowHeight = 0
End If
Next
Case "Весна", "весна", "ВЕСНА" '- в ячейку введено "Весна" (в разных вариантах возможного написания)
For Each cl In blok
If cl <> "Март" And cl <> "Апрель" And cl <> "Май" Then
Rows(cl.Row).RowHeight = 0
End If
Next
Case "Лето", "лето", "ЛЕТО" '- в ячейку введено "Лето" (в разных вариантах возможного написания)
For Each cl In blok
If cl <> "Июнь" And cl <> "Июль" And cl <> "Август" Then
Rows(cl.Row).RowHeight = 0
End If
Next
Case "Осень", "осень", "ОСЕНЬ" '- в ячейку введено "Осень" (в разных вариантах возможного написания)
For Each cl In blok
If cl <> "Сентябрь" And cl <> "Октябрь" And cl <> "Ноябрь" Then
Rows(cl.Row).RowHeight = 0
End If
Next
Case Else '- в ячейку введен какой то другой набор символов
MsgBox "Словоформа не является обозначением понятия " & Chr(171) & "Время года" & Chr(187) & "!"
End Select
End With
End If
End Sub
ну или, если Вам нужно, что бы лист был свободен от макросов, ну скажем для копирования его и передачи другому пользователю, то вместо:
Private Sub Worksheet_Change(ByVal Target As Range)
....
End Sub
оберните все в:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
...
End Sub
но тогда нужно обязательно ссылаться на Sh — куда будет передаваться имя листа!
Путей к вершине — множество. Этот один из многих!
Вот видишь, Серёга, Dauria не ищет простых путей!
(кстати, в профиле пользователя М/Ж не указано и судить об этом можно только по единственному слову «смог» в посте, что вполне могло быть и опечаткой )
Ни твой простейший, ни мой чуть сложнее, но более гибкий варианты топик-стартера не заинтересовали… Хочет разобраться с вариантом GWolf . Ну, флаг — в руки.
GWolf,
примените Option Compare Text в декларациях модуля или UCase (cl) и Select Case UCase (Target) в процедуре чтобы не указывать все возможные варианты написания заглавных и строчных букв в названиях сезонов и месяцев (всё равно ВсЕ ВАриАнты НАПИсаНия нЕ пРЕДусМОТриТЕ)
Но всё равно, даже при вашем варианте решения, ИМХО, привязываться к конкретным ячейкам, прописывая их адреса в коде — не правильно. Намного удобнее использовать именованные диапазоны.
Тогда при необходимости добавить/удалить строку/столбец ВНЕ рабочей области таблицы (ну, например, создать дополнительную строку для заголовка таблицы или добавить слева от месяцев доп. столбец) или переместить в другое место на листе ячейку выпадающего списка, из которого выбираются названия сезонов, не будет необходимости править код, т.к. именованные диапазоны сами будут «ползать» по листу.
С уважением, Алексей
Цитата: Alex_ST от 11.04.2011, 09:53
…примените Option Compare Text в декларациях модуля или UCase (cl) и Select Case UCase (Target) в процедуре чтобы не указывать все возможные варианты написания заглавных и строчных букв в названиях сезонов и месяцев (всё равно ВсЕ ВАриАнты НАПИсаНия нЕ пРЕДусМОТриТЕ)
Но всё равно, даже при вашем варианте решения, ИМХО, привязываться к конкретным ячейкам, прописывая их адреса в коде — не правильно. Намного удобнее использовать именованные диапазоны.
Тогда при необходимости добавить/удалить строку/столбец ВНЕ рабочей области таблицы (ну, например, создать дополнительную строку для заголовка таблицы или добавить слева от месяцев доп. столбец) или переместить в другое место на листе ячейку выпадающего списка, из которого выбираются названия сезонов, не будет необходимости править код, т.к. именованные диапазоны сами будут «ползать» по листу.
Спасибо коллега! Учту.
Путей к вершине — множество. Этот один из многих!
И ещё:
1. В коде у вас указано:
'загрузим в переменную blok значения интервала "B4:B15"
Set blok = .Range(Cells(4, 2), Cells(15, 2))
это что, для того, чтобы запутать?
Наверное, понятнее было бы всё-таки так:
'загрузим в переменную blok значения интервала "B4:B15"
Set blok = .Range("B4:B15")
2. Зачем вы указываете конкретную высоту строки — 12,5:
Rows(cl.Row).RowHeight = 12.75
Может, всё-таки лучше использовать автоподбор высоты строки:
cl.EntireRow.AutoFit
С уважением, Алексей
Всем большое спасибо! Очень помогли.