@Nikita07

Как выделить текущий месяц через VBA?

Добрые день, как в Excel с помощью макрсов в зависимости от активной ячейки с датой, выделить весь месяц соответсвующий этой дате?
Пример: На скриншоте выделена ячейка с 08.09.2019, как выделить диапазон с сентябрём при помощи VBA?
5d6f27dca71e1528430089.png
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 2
@stictt
просто рак
Если мне не изменяет память это можно сделать просто формулой, =СЕГОДНЯ() формула возвращает текущую дату, в условном оформлении на диапазон вы задаете если дата равна этой дате (сегодня) то красить ячейку. Это очень просто
Ответ написан
@ClearAirTurbulence
Вариант 1
Вам нужно по событию Workbook_SheetSelectionChange смотреть каждый раз Value активной ячейки; если проверяемые значения только в части таблицы, например, в одном лишь столбце или нескольких столбцах, возможно, имеет смысл перед этим проверять, находится ли курсор в зоне, которую нужно обрабатывать.
Проверяете, если Value ячейки - дата, выделяете из нее год и месяц.
Проверяете, если макрос уже запускался, и год-месяц из текущей ячейки такой же, как и раньше, exit sub.
Если сменились - снимаете покраску с ранее раскрашенного (или всего оптом, если не жалко).
В обрабатываемом диапазоне красите все ячейки с нужным годом и месяцем нужным цветом.

Важно:
- если в диапазоне бывают крашеные пользователем\другим макросом ячейки, цвет которых надо сохранить, нужно перед покраской проверять значение цвета каждой ячейки, и сохранять его, а потом возвращать для крашеных ячеек.
- ЕМНИП, при исподльзовании макросов такого рода не будет нормально работать стек Undo, что может быть критично для пользователя.

Вариант 2
Совмещаем VBA и условное форматирование.
Делаем условное форматирование на диапазон с данными, по которому красим в нужный цвет все ячейки с годом и месяцем, полученнным из значения даты в текущей ячейке. А т.к. мне неизвестны способы в формуле узнать activecell.value, делаем все, что указано в варианте 1 выше - но кроме раскраски и проверки, поменялись ли месяц-год. Просто каждый раз при смене ячейки кидаем ее значение в ячейку, куда пользователь не доберется, а ее указываем при настройке условного форматирования.

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

Минусы
- условное форматирование может слететь\мутировать с ходом времени при операциях с таблицей. В идеале его нужно задавать программно при старте таблицы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Instamart Москва
До 230 000 руб.
СМАРТ-СОФТ Волгоград
от 60 000 до 90 000 руб.
Gems Development Омск
от 60 000 до 140 000 руб.
22 окт. 2019, в 14:41
3000 руб./за проект
22 окт. 2019, в 14:13
800 руб./в час
22 окт. 2019, в 14:13
2000 руб./за проект