В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц 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.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Подписывайтесь на нас в соц.сетях:
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 |
На чтение 7 мин. Просмотров 2k.
Итог: Экономите тонны времени, автоматически форматируя числа в области ваших сводных таблиц с помощью макроса VBA. Форматирование чисел автоматически применяется при перетаскивании поля в область «Значения» за один шаг.
Уровень мастерства: Средний
Содержание
- Видео
- Скачать файл
- Проблема с форматами чисел сводных таблиц
- Макрос автоматического форматирования чисел
- Как я могу использовать эту функцию?
- Как работает макрос?
- Будущие улучшения
Видео
Посмотрите видео ниже, чтобы увидеть автоматическое форматирование чисел в действии.
Скачать файл
Загрузите
файл, содержащий макросы.
Pivot Table Automatic Number Formatting Macro.xlsm (28.4 KB)
Надстройка PivotPal (платная) также имеет эту функцию и может быть загружена и установлена.
Второе видео, объясняющее макрос, доступно ниже.
Проблема с форматами чисел сводных таблиц
Обычно, когда мы добавляем поле в область значений сводной
таблицы, ячейки форматируются в формате общего числа. Это формат по умолчанию
для всех ячеек на листе, и сводная таблица НЕ меняет его.
К сожалению, общий числовой формат делает номера уродливыми. Как вы можете видеть на скриншоте ниже, общий формат не добавляет запятые/точки для разделителей тысяч, количество десятичных знаков не фиксировано.
После добавления поля в область значений, мы должны предпринять
дополнительные шаги для форматирования чисел. Это многошаговый процесс,
требующий нескольких кликов. Существует несколько различных способов применения
форматирования чисел к области значений, и это может занять много времени.
Итак, как мы можем изменить форматирование по умолчанию на
что-то, кроме General?
Я создал макрос, который автоматически применяет
форматирование чисел при добавлении поля в область значений. Я также добавил
эту функцию в надстройку PivotPal. Если вы не хотите связываться с макросами,
вы можете скачать и установить надстройку, чтобы получить эту функцию.
Макрос автоматического форматирования чисел
Макрос автоматически форматирует числа в области значений
сводной таблицы, когда мы добавляем поле в область значений в списке полей сводной
таблицы. Это одношаговый процесс. Вам не нужно предпринимать никаких
дополнительных шагов для форматирования чисел.
Какой формат чисел он использует?
Макрос определяет числовой формат, используемый в диапазоне исходных данных поля. В приведенном ниже примере столбец «Доход» в диапазоне исходных данных отформатирован в формате «Финансовый». Таким образом, макрос обнаруживает это и автоматически применяет этот числовой формат к полю «Доход» в области значений.
Если столбец в диапазоне исходных данных не отформатирован, то применяется числовой формат по умолчанию. Числовой формат по умолчанию в настоящее время установлен в формате запятой [0] (#, 000), но вы можете изменить это в коде макроса или в надстройке PivotPal.
Числовой формат по умолчанию также используется, если диапазон исходных данных не существует в рабочей книге или находится в модели данных.
Этот макрос должен сэкономить вам массу времени благодаря форматированию чисел в ваших сводных таблицах. Вы можете применить форматирование к диапазону исходных данных один раз и автоматически применить его ко всем сводным таблицам, которые вы создадите / измените в будущем.
Макрос будет работать с любой существующей сводной таблицей или новой сводной таблицей.
Автоматическое форматирование чисел может быть включено / выключено нажатием кнопки в меню правой кнопки мыши на сводной таблице. Эта кнопка добавлена с макросом, который включен в загружаемый файл.
Как я могу использовать эту функцию?
Есть два способа реализовать эту функцию.
Вариант 1. Добавьте макросы в личную книгу макросов.
Вы можете скачать файл, содержащий макросы, и добавить модули кода в свою личную книгу макросов (PMW).
Pivot Table Automatic Number Formatting Macro.xlsm (28.4 KB)
Файл можно загрузить бесплатно, а также вы можете изменить
код. В видео ниже я объясню, как установить макросы в PMW, а также расскажу,
как все это работает.
Изучите мою статью и серию видео в Персональной рабочей книги для макросов, чтобы узнать все об этом инструменте для Excel.
Вариант 2. Получить надстройку PivotPal
Эта функция также была добавлена в надстройку PivotPal. Это платная надстройка.
Вы можете скачать и установить PivotPal, чтобы получить эту функцию. Вам не нужно знать VBA или связываться с любым кодом для этой опции. Просто скачайте и установите надстройку, и кнопка «Автоформатирование чисел» будет добавлена в меню, вызываемое правой кнопкой мыши.
Нажмите здесь, чтобы узнать больше о PivotPal
Как работает макрос?
Видео ниже объясняет в деталях, как работает макрос.
Это решение работает с использованием события PivotTableUpdate для автоматического запуска макроса при внесении каких-либо изменений в сводную таблицу.
Макрос использует цикл For Next Loop для циклического прохождения всех полей в области значений (поля данных) и проверяет свойство NumberFormat, чтобы увидеть, отформатированы ли они в общем формате. Если поле содержит общее форматирование, то макрос пытается получить форматирование для поля в диапазоне исходных данных. Если он не найден или является общим, то макрос применяет заданный вами формат чисел по умолчанию. Так или иначе, ячейки в области значений НИКОГДА не будут отформатированы с общим форматом.
Вы можете отключить автоматическое форматирование чисел в любое время с помощью кнопки в меню, вызываемом правой кнопкой мыши, если вы хотите сохранить числа, отформатированные как Общие.
Решение использует События приложения для мониторинга изменений в любой сводной таблице в любой открытой книге. Это означает, что вы можете добавить модули кода в свою личную книгу макросов или файл надстройки, код будет выполняться на любой открытой книге. Вам НЕ нужно добавлять макросы в каждую книгу, которая содержит сводные таблицы.
Вот две хорошие статьи от Chip Pearson и Microsoft.
Модули кода также содержат макросы для добавления кнопки автоматического форматирования чисел в контекстное меню (контекстное меню). Это работает как кнопка переключения, которая позволяет вам включать / выключать функцию.
* Важное примечание. Это решение является полным обходным решением очень распространенной и трудоемкой проблемы в Excel. В настоящее время событие PivotTableUpdate будет срабатывать, когда в сводную таблицу вносятся какие-либо изменения или когда обновляется сводная таблица.
Итак, если у вас есть существующая сводная таблица с общим
форматированием и вы обновите сводную таблицу, макрос запустится, чтобы
изменить форматирование на исходный / стандартный числовой формат. Если вы
хотите сохранить формат чисел как Общий в сводной таблице, отключите
автоматическое форматирование чисел перед обновлением / изменением сводной
таблицы.
Если поле в области значений уже отформатировано с
использованием чего-то отличного от General, то макрос НЕ изменит числовой
формат при выполнении обновления / модификации. Макрос ТОЛЬКО изменяет
форматирование чисел с общего на формат источника / по умолчанию.
Будущие улучшения
Я использую эту функцию в течение нескольких недель, и у меня уже есть идеи по ее улучшению.
# 1 — Запускать макрос можно только при добавлении нового поля в область значений.
Как я упоминал выше, макрос запускается каждый раз, когда сводная таблица изменяется или обновляется. Это не вызвало никаких проблем для меня, потому что я никогда не хочу оставлять область значений в формате General. Однако мы могли бы улучшить это, так что макрос запускается только тогда, когда новое поле добавляется в область значений. Это, вероятно, потребовало бы от нас хранения количества полей данных, которые в настоящий момент находятся в активной сводной таблице, с дополнительным мониторингом с помощью событий Worksheet_Change и Worksheet_Activate.
# 2 — Интеллектуальное форматирование чисел
Включение форматирования из диапазона исходных данных — это здорово, но в некоторых случаях агрегация вызывает необходимость в другом формате. Например, мы могли бы использовать стандартный формат номера бухгалтерского учета в столбце исходных данных для дохода. Когда мы добавляем это поле в область значений, оно может суммироваться с гораздо большими числами. Таким образом, мы могли бы вместо этого использовать числовой формат тысяч (500 000 долларов) или миллионов (5,5 миллионов долларов США).
Макрос также может обнаружить это и даже установить пороги или правила для того, какое форматирование чисел следует применять, основываясь на максимальных, минимальных или средних значениях в области значений.
Другой вариант — поместить любимые форматы чисел в контекстное меню для быстрого доступа. Есть пробный взгляд на будущую особенность …
Опять же, если вам не нужны макросы, функция автоматического форматирования чисел включена в мою надстройку PivotPal.
Какие предложения у вас есть для функций? Пожалуйста,
оставьте комментарий ниже с предложениями или вопросами. Спасибо!
Макрос форматирования заголовка таблицы
Очень часто мне присылают для обработки файлы, в которых заголовки таблиц никак не отформатированы, что затрудняет работу с такими таблицами.
Поскольку выполнять вручную каждый раз одни и те же действия надоедает, бы написан этот простенький макрос.
Что он делает: (действия выполняются с выделенным диапазоном ячеек)
- устанавливает выравнивание текста ячеек по центру
- разрешает перенос текста ячеек по словам
- закрашивает ячейки серым цветом
- рисует рамку вокруг ячеек
- закрепляет строку, расположенную непосредственно под выделенным заголовком
- (чтобы заголовок таблицы не прокручивался при скроллинге)
Sub ФорматированиеВыделенногоЗаголовка() On Error Resume Next Dim ra As Range: Set ra = Selection With ra .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = True .Interior.ColorIndex = 15 With .Borders .LineStyle = xlContinuous .Weight = xlThin End With End With Set ra = Intersect(ra.Cells(ra.Cells.Count).Offset(1).EntireRow, ra.Cells(1).EntireColumn) ra.Select: ActiveWindow.FreezePanes = True End Sub
- 11871 просмотр
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Очень часто мне присылают для обработки файлы, в которых заголовки таблиц никак не отформатированы, что затрудняет работу с такими таблицами.
Поскольку выполнять вручную каждый раз одни и те же действия надоедает, бы написан этот простенький макрос.
Что он делает: (действия выполняются с выделенным диапазоном ячеек)
- устанавливает выравнивание текста ячеек по центру
- разрешает перенос текста ячеек по словам
- закрашивает ячейки серым цветом
- рисует рамку вокруг ячеек
- закрепляет строку, расположенную непосредственно под выделенным заголовком
- (чтобы заголовок таблицы не прокручивался при скроллинге)
Sub ФорматированиеВыделенногоЗаголовка()
On Error Resume Next
Dim ra As Range: Set ra = Selection
With ra
.Font.Bold = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Interior.ColorIndex = 15
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
End With
End With
Set ra = Intersect(ra.Cells(ra.Cells.Count).Offset(1).EntireRow, ra.Cells(1).EntireColumn)
ra.Select: ActiveWindow.FreezePanes = True
End Sub
- 8906 просмотров
Форматирование таблицы макросом |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |