Excel: формат по образцу для нескольких ячеек

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

Урок, который надо усвоить на будущее, заключается в том, что не надо изобретать очередной велосипед, а стоит лишь к существующему прочитать справку усмешка. Достаточно было просто навести на соответствующую кнопку мышкой и во всплывающем сообщении дочитать до конца

«Формат по образцу»

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

Мой макрос работает по другой идеологии. Нужно сначала выделить ячейки (можно раздельные выделения через ctrl)

Выделяем ячейки (раздельное выделение через ctrl)

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

Выбираем ячейки, у которых надо скопировать формат

После работы видим, что выделенные ячейки приняли нужный формат

Результат работы макроса

В общем, ничего сложного. Можно сказать даже, что макрос в одну строчку через метод PasteSpecial. НО кто пишет макросы в excel, те знают, что после работы макроса отсутствует возможность откатить результат. Если при любом действии Excel вы можете нажать стрелочку назад или ctrl+Z, то после макроса все попытки будут тщетны. А при использовании копирования формата обязательно какие-то ячейки случайно зацепишь или не в тот формат переведешь, в общем, отмену действий надо обязательно сделать.

Прочитав статью Как отменить действия макроса, стало понятно, что надо все делать самому в части восстановления данных. Я пошел по первому пути (сохранении свойств ячейки), все таки делать копию листа это круто, но следить в файле копиями листов без 100% возможности потом за собой убрать как-то нехорошо.

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

Отмена действий макроса

и результат не заставит себя ждать

Результат отмены действий макроса

Есть, конечно, проблемка, описанная в оригинальной статье. Если выделяется, допустим, целая строка или колонка, то сохранение свойств приводит к притормаживанию, а отмена действий посылает Excel в хороший нокдаун. Поэтому в макросе для выделенных ячеек, количество которых более 100, отключается отмена действий. То есть макрос работает, но потом результат не вернешь. Хорошая новость: лучше строки и колонки копировать через стандартную команду «Формат по образцу», так как потом доступна отмена действий и Excel все это делает за секунды.

Единственный косяк в работе стандартной функции копирования формата: при объединенный ячейках в особых случаях excel пишет такое сообщение

Ошибка копирования формата

То есть, когда вы пытаетесь скопировать формат в строку с объединенными ячейками, вам нужно обязательно выделить полностью всю ячейку, иногда сразу это невозможно или трудно сделать. Но вот мой макрос спокойно применяет формат (насильно), убирая при этом объединенные ячейки

Результат работы макроса

Файл Excel c макросом ExampleCopyFont.xlsm

Отдельно только макрос macros_copyFormat.txt

Оцените статью
В коробке инженера
Добавить комментарий

Нажимая на кнопку "Добавить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности

Введите буквы на русском языке : *

Reload Image

  1. Кирилл

    Спасибо!

    Ответить