@Nikita07

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы