Найти в Дзене
Крот с Нибиру

Необычное применение Excel VBA: меняем фон рабочих листов под любое фото

Оглавление

Здравствуйте!

Сегодня поговорим об Excel – прекрасной программе для работы с таблицами. Многие знают, что эта программа достаточно сложная и объемная, но не все догадываются, что ее потенциал возрастает в десятки раз при использовании средств VBA – макросов.

О написании макросов на языке программирования VBA (Visual Basic for Application) написаны тонны статей и сняты километры видео. Я, быть может, добавлю своих пять центов и как-нибудь напишу, чем мне нравится VBA. А в данном посте я всего лишь хочу показать, что область применения макросов выходит далеко за пределы простых вычислений.

Что делаем?

Займемся необычным делом – напишем макрос, который красит ячейки листа книги Excel по выбранной нами фотографии. Спросите: «А зачем это нужно?» «Да кто ж его знает, просто прихоть такая» - отвечу я.

Справа ориинальный логотип Яндекс Дзен, а слева - его копия из ячеек Excel
Справа ориинальный логотип Яндекс Дзен, а слева - его копия из ячеек Excel

Я долго думал, в каких случаях такое может пригодиться…очень долго думал, чесслово, но так и не придумал. Да и вообще, почему все должно иметь смысл? Вон сколько песен популярных не несет в себе никакого смысла, но вы ж не спрашиваете певцов, зачем они их исполняют?

Как решаем проблему?

Предположим, что вы нашли причину для данной операции (кстати, поделитесь в комментариях, если придумали, где такое может быть полезно?). Осталось найти путь к реализации. Не буду ходить вокруг да около, подход здесь простой:

  1. Читаем изображение попиксельно.
  2. Считываем значения RGB (как известно, это один из способов передачи цвета).
  3. Каждому пикселю присваиваем соответствующую по положению ячейку листа (например, вторая слева в пятом ряду), назначаем ей цвет из п.2
  4. Уменьшаем размер затронутых ячеек, чтобы изображение можно было посмотреть полностью.
Принцип передачи цвета RGB (ист: wikipedia.org)
Принцип передачи цвета RGB (ист: wikipedia.org)

Конечно, тут есть небольшие технические трудности. Например, информация о пикселях идет одной строкой, следовательно, позицию пикселя изображения (строку и столбец) надо вычислять. Ну и, собственно, сами значения RGB бинарные, так что необходимо воспользоваться функциями перевода из «101010» в целые числа… но разве для патриотов есть преграды? 😊

Результат

Макрос работает достаточно быстро. Решил напоследок покрасить лист под фоновое изображение этого канала.

Раскрасил лист Excel под фон канала "Крот С Нибиру"
Раскрасил лист Excel под фон канала "Крот С Нибиру"

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

P.S. Для доступа к изображениям через VBA я использовал:

Set img = CreateObject("WIA.ImageFile")

Наука
7 млн интересуются