В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц Excel средствами VBA.
VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк
В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:
Необходимо сбросить форматирование ячеек и сделать так чтобы на всех таблицах планов выполнения работ были одинаковые форматы отображения данных. Формат ячеек для исходной таблицы должен быть закреплен за шаблоном, чтобы можно было сделать сброс и применять заданный стиль оформления в дальнейшем.
Чтобы выполнять такие задачи вручную можно попытаться облегчить процесс настройки множества опций форматирования для многих диапазонов ячеек на разных листах и рабочих книгах. Плюс к о всему можно ошибиться и применить несколько другие настройки форматирования.
Макросы Excel прекрасно справляются с форматированием ячеек на рабочих листах. Кроме того, делают это быстро и в полностью автоматическом режиме. Воспользуемся этими преимуществами и для решения данной задачи напишем свой код VBA-макроса. Он поможет нам быстро и безопасно сбрасывать форматы на исходный предварительно заданный в шаблоне главной таблицы.
Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:
В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:
Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub
Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:
Таблица приобрела формат, который определен макросом. Таким образом код VBA нам позволяет сбросить любые изменения формата ячеек на предустановленный автором отчета.
Описание VBA-макроса для формата ячеек таблицы Excel
Первая инструкция в коде, проверяет выделены ли ячейки диапазоном. Если перед выполнением макроса выделил другой элемент листа, например, график, тогда макрос закрывается и дальнейшие инструкции выполняться не будут. В противные случаи будут форматироваться все выделенные ячейки по очереди в соответствии с определенными настройками форматирования:
- Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
- Включен построчный перенос текста.
- Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
- Сброс цвета шрифта на авто.
- Удаляется любая заливка ячеек.
- Ширина столбцов автоматически настраивается под текст в ячейках.
- Автоматически настроить высоту строк по содержимому ячеек.
Модификация исходного кода макроса для форматирования
Если необходимо сделать так чтобы текст выравнивался не по центру относительно горизонтали, а по правую сторону ячейки, тогда измените константу xlHAlignCenter на xlHAlignRight. Она находиться в свойстве .HorizontalAlignment. Сделайте это следующим образом:
.HorizontalAlignment = xlHAlignRight.
Таким же образом можно выровнять текст по левую сторону изменив значение константы на xlHAlignLeft. Или можно выровнять положение текста по ширине ячейки используя константу xlHAlignJustify.
Чтобы макрос выравнивал текст в ячейках по вертикали к низу, измените строку кода, отвечающую за данную настройку форматирования. Измените константу, которая присваивается к свойству VerticalAlignment в следующий способ:
Если хотите выровнять текс к верху ячейки, тогда воспользуйтесь константой xlHAlignTop.
Если нужно применить для границ ячеек толстую и пунктирную линию в синем цвете, смодифицируйте инструкцию, отвечающую за формат линий:
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
Описание настройки форматирования для линий границ ячеек. Мы будем получать разные дополнительные типы линий границ если для свойства LineStyle присваивать такие константы:
- xlDoshDot – применяется для рисования пунктирных линий в границах ячеек;
- xlDouble – рисует двойную линию;
- xlHairLine – рисует тонкую линию;
- xlThick – для рисования очень толстой линии.
Для настройки цвета линий Excel предлагает всего 8 констант для определенных цветов. Константы для настройки цвета линий границ для свойства Color:
- vbBlack – черный;
- vbWhite – белый;
- vbRed – красный;
- vbGreen –зеленый;
- vbBlue – синий;
- vbYellow – желтый;
- vbMagenta – алый;
- vbCyan – голубой.
Но при необходимости присвоить линиям границ другие цвета можно вместо константы для свойства Color записать функцию RGB(). Достаточно лишь в аргументе этой функции указать код цвета по шкале от 0 и до 255.
Если нужно применить толстую линию только для границ выделенного диапазона, тогда перед инструкцией End With добавьте следующую строку кода:
.BorderAround xlContinuous, xlMedium, vbBlack
Описание: В первом аргументе для метода BorderAround можно записать также другой стиль линии. Во втором – толщину линии, а в третьем – цвет. Константы, которые можно присвоить в качестве значений для этих аргументов можно использовать те же, которые мы использовали для свойств: LineStyle, Weight, Color.
Если нужно экспонировать первую строку для выделенного диапазона с помощью жирного и курсивного шрифта значений ячеек. А также заполнить ячейки первой строки заливкой с голубым цветом, тогда в самом конце кода макроса перед последней инструкцией End Sub следует добавить несколько строк с VBA-кодом:
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
Если хотите присвоить такой же формат для не только для первой строки, но и для первого столбца выделенного диапазона, тогда скопируйте и вставьте ниже эти 3 строчки кода. После в последних трех строках измените свойство Rows на Columns.
.Columns (1).Font.Bold = True
.Columns (1).Font.Italic = True
.Columns (1).Interior.Color = vbCyan
Если нужно задать особенный формат для экспонирования последней строки выделенного диапазона, тогда измените число 1 в аргументе свойства Rows на число всех выделенных строк .Rows.Count. Например, добавьте в конец кода еще такую строку:
.Rows(.Rows.Count).Font.Bold = True
Полная версия модифицированного кода макроса выглядит так:
Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
.BorderAround xlContinuous, xlMedium, vbBlack
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
.Columns(1).Font.Bold = True
.Columns(1).Font.Italic = True
.Columns(1).Interior.Color = vbCyan
.Rows(.Rows.Count).Font.Bold = True
End With
End Sub
Пример работы измененного кода VBA-макроса:
В данном примере вы ознакомились с базовыми возможностями форматирования с помощью VBA-макросов. Уверен, что теперь вы сможете самостоятельно найти практическое применение этим исходным кодам.
Пример макроса. Форматируем таблицу.
Если часто приходится форматировать таблицы однотипным образом, то в целях экономии времени можно записать макрос и использовать его в дальнейшем.
Итак, есть таблица
и мы хотим ее отформатировать так:
- шапка и последняя (итоговая) строки — жирным шрифтом, текст шапки — по центру
- граница всей таблицы — сплошной жирной линией
- границы ячеек внутри — пунктирной линией
Запускаем на запись макрос
«Меню»
—
«Сервис»
—
«Макрос»
—
«Начать запись»
.
Дальше по шагам:
- Выделяем всю таблицу.
- Правой кнопкой вызываем контекстное меню и выбираем «Формат ячеек«.
- Выбираем вкладку «Граница«. Выбираем тип линии «сплошная жирная» и щелкаем кнопку «внешние«, затем тип линии «пунктир» и щелкаем кнопку «внутренние«.
- Щелкаем ОК. Границы должны появиться.
- Выделяем первую строку таблицы и щелкаем на панели инструментов «форматирование» кнопки «по центру» и «полужирный«.
- Выделяем последнюю строку таблицы и щелкаем на панели инструментов «форматирование» кнопку «полужирный«.
Останавливаем запись макроса и открываем его для редактирования
«Меню»
—
«Сервис»
—
«Макрос»
—
«Макросы»
кнопка
«Изменить»
.
Получаем такой код:
Справа от команд я записал, что выполняет команда.
Глядя на макрос мы видим жесткую привязку к диапазонам. Надо от этого избавиться.
Удаляем строки со второй по четвертую, а именно
Range(«B4:F12»).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Удаляем строку
Range(«B4:F4»).Select
и вместо следующей строки
With Selection
пишем
With Selection.Rows(1) — так мы ссылаемся на первую строку выделенного диапазона
Вместо строки
Selection.Font.Bold = True
пишем
Selection.Rows(1).Font.Bold = True — опять же ссылаемся на первую строку и делаем текст в ней жирным.
Удаляем строку
Range(«B12:F12»).Select
и вместо следующей строки
Selection.Font.Bold = True
пишем
Selection.Rows(Selection.Rows.Count).Font.Bold = True — ссылаемся на последнюю строку и делаем текст в ней жирным.
Теперь можно проверить макрос.
Для этого выделяем нужную таблицу и запускаем макрос
«Меню»
—
«Сервис»
—
«Макрос»
—
«Макросы»
кнопка
«Выполнить»
.
Похожие по тематике посты — еще почитать:
- Что делает макрос для выбора диапазона
- Код макроса для выбора диапазона
- Как работает макрос
- Что делает макрос для изменения форматирования диапазона
- Код макроса для изменения форматирования диапазона
- Как работает макрос
- Что делает макрос для изменения форматирования диапазона без выделения диапазона
- Код макроса для изменения форматирования диапазона без выделения диапазона
- Что делает макрос для изменения форматирования диапазона через позиции ячеек
- Код макроса для изменения форматирования диапазона через позиции ячеек
- Как использовать
- Скачать файл
Ссылка на это место страницы:
#zadacha1
В этом макросе выбирается диапазон с помощью объекта Range.
Ссылка на это место страницы:
#formula1
Sub
VibratDiapazon()
Range(
"D5:D16"
).
Select
End
Sub
Ссылка на это место страницы:
#kak1
После того, как выбран диапазон ячеек, вы можете использовать любые свойства Range, манипулируя ячейками. В макросе мы добавили команды для преобразования диапазона в формат числа, изменения цвета фона на желтый и изменения шрифта на жирный.
Ссылка на это место страницы:
#zadacha2
После того, как выбран диапазон ячеек, вы можете использовать любые свойства Range, манипулируя ячейками. В макросе мы добавили команды для преобразования диапазона в формат числа, изменения цвета фона на желтый и изменения шрифта на жирный.
Ссылка на это место страницы:
#formula2
Sub
IzmenitFormat()
Range(
"D5:D16"
).
Select
Selection.NumberFormat =
"#,##0"
Selection.Font.Bold =
True
Selection.Interior.ColorIndex = 36
End
Sub
Ссылка на это место страницы:
#kak2
Вам не нужно запоминать все свойства объекта ячейки для того, чтобы манипулировать ими. Вы можете просто записать макрос, выполнив форматирование, а затем посмотреть на код, который написал Excel. После того, как вы увидели, что синтаксис правильный, вы можете применить его по мере необходимости. Многие программисты Excel начинают обучение VBA с этого.
Мы используем метод Selection много раз в примере кода. Для того, чтобы написать более эффективный код, вы можете просто сослаться на диапазон, используя With … End With. Этот оператор говорит Excel, что любое действие, которое вы выполняете относится к объекту, который вы ранее указали.
Ссылка на это место страницы:
#zadacha3
Обратите внимание, что этот макрос фактически не выбирает диапазон, он ссылается на него, но при этом он не выделяется физически. Это ключевой момент. В макросе, мы можем работать с диапазоном, не выделяя его.
Ссылка на это место страницы:
#formula3
Sub
IzmenitFormatWith()
With
Range(
"D5:D16"
)
.NumberFormat =
"#,##0"
.Font.Bold =
True
.Interior.ColorIndex = 36
End
With
End
Sub
Ссылка на это место страницы:
#zadacha4
Еще один способ, как можно выбрать диапазон с помощью элемента ячейки объекта Range.
Адрес ячеек — это удобный способ выбора диапазонов через код. Он требует только позиции строк и столбцов в качестве параметров. Ячейка (5, 4) относится к строке 5, столбцу 4 (или ячейка D5).
Ячейки (16, 4) относится к строке 16, столбцу 4 (или ячейки D16). Если вы хотите выбрать диапазон ячеек, просто укажите два пункта в объект Range.
Вот полный код форматирования с помощью позиций ячеек. Опять же, обратите внимание, что этот макрос фактически не выделяет диапазон. Мы можем работать с диапазоном, не выделяя его.
Ссылка на это место страницы:
#formula4
Sub
IzmenitFormatWith()
With
Range(
"D5:D16"
)
.NumberFormat =
"#,##0"
.Font.Bold =
True
.Interior.ColorIndex = 36
End
With
End
Sub
Ссылка на это место страницы:
#touse
1. Активируйте редактор Visual Basic, нажав ALT + F11.
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
3. Выберите Insert➜Module.
4. Введите или вставьте код во вновь созданном модуле
Ссылка на это место страницы:
#file
Файлы статей доступны только зарегистрированным пользователям.
1. Введите свою почту
2. Нажмите Зарегистрироваться
3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Подписывайтесь на нас в соц.сетях:
Как выбрать и изменить форматирование диапазона
На чтение 3 мин. Просмотров 2.8k.
Что делает макрос: Этот простой макрос выбирает диапазон D5: D16 и форматирует его.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Код макроса
- Как этот код работает
- Код макроса
- Как использовать
Как макрос работает
В этом макросе определяется диапазон для выбора с помощью объекта Range.
Код макроса
Sub VibratDiapazon() 'Выбор диапазона Range("D5:D16").Select End Sub
После того, как выбран диапазон ячеек, вы можете использовать любые свойства Range, манипулируя ячейками. Мы изменили этот макрос, чтобы диапазон желтого цвета преобразовался в формат числа и стал выделенным жирным шрифтом.
Sub IzmenitFormat() 'Выбор диапазона Range("D5:D16").Select 'Преобразование в формат числа Selection.NumberFormat = "#,##0" 'Жирный шрифт Selection.Font.Bold = True 'Заливка желтым цветом Selection.Interior.ColorIndex = 36 End Sub
Вам не нужно запоминать все свойства объекта ячейки для того, чтобы манипулировать ими. Вы можете просто записать макрос, выполните форматирование, а затем посмотреть на код, который написал Excel. После того, как вы увидели, что синтаксис правильный, вы можете применить его по мере необходимости. Многие программисты Excel начинают обучение VBA с этого.
Вы заметили, что мы называем Selection много раз в предыдущем примере кода. Для того, чтобы написать более эффективный код, вы можете просто сослаться на диапазон, используя With … End With. Этот оператор говорит Excel, что любое действие, которое вы выполняете относится к объекту, который вы указали.
Обратите внимание, что этот макрос фактически не выбирает диапазон в первую очередь. Это ключевой момент. В макросе, мы можем работать с диапазоном, не выбирая его в первую очередь.
Sub IzmenitFormatWith() With Range("D5:D16") .NumberFormat = "#,##0" .Font.Bold = True .Interior.ColorIndex = 36 End With End Sub
Как этот код работает
Еще один способ, вы можете выбрать диапазон с помощью элемента ячейки объекта Range.
Адрес ячеек — это удобный способ выбора диапазонов через код. Он требует только позиции строк и столбцов в качестве параметров. Ячейка (5, 4) относится к строке 5, столбцу 4 (или ячейка D5).
Ячейки (16, 4) относится к строке 16, столбцу 4 (или ячейки D16). Если вы хотите выбрать диапазон ячеек, просто укажите два пункта в объект Range. Этот макрос выполняет один и тот же выбор диапазона D5:D16:
Код макроса
Sub IzmenitFormatRange() Range(Cells(5, 4), Cells(16, 4)).Select End Sub
Как этот код работает
Вот полный код форматирования с помощью позиций ячеек. Опять же, обратите внимание, что этот макрос фактически не меняет диапазон. Мы можем работать с диапазоном, не выделяя его.
Код макроса
Sub IzmenitFormat3() With Range(Cells(5, 4), Cells(16, 4)) .NumberFormat = "#,##0" .Font.Bold = True .Interior.ColorIndex = 36 End With End Sub
Как использовать
Для реализации такого рода макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код в окно кода.
0 / 0 / 0 Регистрация: 22.03.2011 Сообщений: 12 |
|
1 |
|
22.03.2011, 11:54. Показов 9647. Ответов 28
Здравствуйте, необходимо отформатировать таблицы ( написать макросы ) для нескольких примеров в архиве. вот примеры: Заранее спасибо! файл сюда прицепи
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
22.03.2011, 16:41 |
2 |
Что мешает включить запись макросов?
0 |
0 / 0 / 0 Регистрация: 22.03.2011 Сообщений: 12 |
|
23.03.2011, 09:30 [ТС] |
3 |
Что мешает включить запись макросов? как это решит мою задачу? у меня таблицы не статические. каждый раз колличество полей или строк может меняться. нужнен макрос ( цикл по значениям таблицы с условием ). или хотябы пример макроса кода. алгоритм тут легкий, но записать его в VBA я не могу, из за незнания языка… или подскажите как записать макрос на одном из примеров. вот примеры:
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
23.03.2011, 12:03 |
4 |
как записать макрос Добавлено через 1 час 43 минуты каждый раз колличество полей или строк может меняться Миллион раз обсуждалось: нахождение последней заполненной ячейки
0 |
fox31 0 / 0 / 0 Регистрация: 22.03.2011 Сообщений: 12 |
||||
24.03.2011, 16:36 [ТС] |
5 |
|||
выдает ошибку при запуске макроса. в чем ошибка? прохожусь по 1му столбцу до 255 если находит слово «ВСЕГО» выделяет цветом область следующей строки с A5 : D1
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
24.03.2011, 16:51 |
6 |
а почему 255? Добавлено через 6 минут
0 |
fox31 0 / 0 / 0 Регистрация: 22.03.2011 Сообщений: 12 |
||||
24.03.2011, 17:01 [ТС] |
7 |
|||
переделал немного код
идет по 1му столбцу до пустой ячейки и красит ячейки в строках с A5 до D1
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
24.03.2011, 17:01 |
8 |
Когда спрашиваешь где ошибка — говори какую строчку веделяет отладчик
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
24.03.2011, 17:06 |
9 |
спасибо, попробую так внимательно какую поставили ячейку!!!!!!! на окрашивание
0 |
0 / 0 / 0 Регистрация: 22.03.2011 Сообщений: 12 |
|
24.03.2011, 17:19 [ТС] |
10 |
так внимательно какую поставили ячейку!!!!!!! на окрашивание это я сказал по своему переделанному коду, не вашему варианту Добавлено через 9 минут
Когда спрашиваешь где ошибка — говори какую строчку веделяет отладчик да, тогда в этом ошибка оказалась
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
24.03.2011, 17:23 |
11 |
цвет ячеек, легко Range («A5»).Interior.ColorIndex = 5
0 |
0 / 0 / 0 Регистрация: 22.03.2011 Сообщений: 12 |
|
24.03.2011, 17:26 [ТС] |
12 |
цвет ячеек, легко Range («A5»).Interior.ColorIndex = 5 это вариант пробовал.
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
24.03.2011, 17:29 |
13 |
Range раньше же у Вас было Rows
0 |
0 / 0 / 0 Регистрация: 22.03.2011 Сообщений: 12 |
|
24.03.2011, 17:30 [ТС] |
14 |
раньше же у Вас было Rows да, но пробовал писать и Range
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
24.03.2011, 17:31 |
15 |
короче полный последний код
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||
24.03.2011, 17:44 |
16 |
|||
Это у тебя во втором примере?
1 |
mc-black 2784 / 716 / 106 Регистрация: 04.02.2011 Сообщений: 1,443 |
||||
24.03.2011, 17:55 |
17 |
|||
Я не читал топик, взял последний пример кода и подключил телепатические способности. Вот что из этого вышло (исправлено 3 бага):
А не работало, так как в теле цикла вне условий стояло Exit Do.
0 |
0 / 0 / 0 Регистрация: 22.03.2011 Сообщений: 12 |
|
24.03.2011, 17:56 [ТС] |
18 |
Это у тебя во втором примере? Да во 2м, спсибо, работает отлично. но код ваш для меня немного не понятен скажите, пожалуйста как можно организовать цикл по вашему коду? (чтобы он все столбцы «итого» прорисовывал) все попытки сделать цикл у меня приводили к зависанию экселя и vba редактора
0 |
Заблокирован |
|
29.03.2011, 10:12 |
19 |
fox31,
1 |
fox31 0 / 0 / 0 Регистрация: 22.03.2011 Сообщений: 12 |
||||
29.03.2011, 11:27 [ТС] |
20 |
|||
получается так:
но опять же действует для одного значения «ИТОГО»
0 |