alcnwndrlnd Пользователь Сообщений: 44 |
#1 08.12.2015 10:03:45 Всем привет!
Уж больно здесь красиво, жди беды.. |
|
vdovin_sg Пользователь Сообщений: 58 |
А почему бы не воспользоваться условным форматированием? Можно выделить нужный столбец и задать в разделе условное форматирование нужные условия. Сколько необходимо! |
vdovin_sg, хотелось бы макросом как-то автоматизировать процесс, нажатием одной кнопки, так сказать, а условное форматирование каждый раз добавлять. Уж больно здесь красиво, жди беды.. |
|
vdovin_sg Пользователь Сообщений: 58 |
alcnwndrlnd, Ясно, в макросах я не силен, сам только учусь. |
vdovin_sg, вот и я тоже, пока что но все еще впереди Уж больно здесь красиво, жди беды.. |
|
vdovin_sg Пользователь Сообщений: 58 |
#6 08.12.2015 10:29:55 а если попробовать использовать цикл for a=1 to 500
|
||
vdovin_sg, идея хорошая, а что делать с проверкой нескольких значений? в разных else if — ах расписать только если Уж больно здесь красиво, жди беды.. |
|
Kuzmich Пользователь Сообщений: 7998 |
#8 08.12.2015 10:52:25
|
||
k61 Пользователь Сообщений: 2441 |
#9 08.12.2015 10:56:17
|
||
Kuzmich, k61, тааак, спасибо, сейчас поразбираюсь.. в принципе реально вставить вместо «1» и «2» текстовые значения? Уж больно здесь красиво, жди беды.. |
|
Kuzmich Пользователь Сообщений: 7998 |
|
alcnwndrlnd Пользователь Сообщений: 44 |
#12 08.12.2015 11:27:25 Kuzmich, в таком случае, подскажите, пожалуйста, синтаксис. Как-то надо сослаться на текстовое значение? Ох уж этот ВБА, с++ и то легче.. голова уже кругом
Изменено: alcnwndrlnd — 08.12.2015 11:27:44 Уж больно здесь красиво, жди беды.. |
||
Kuzmich Пользователь Сообщений: 7998 |
А что не получается. Строку с «раму» видимо надо посветить другим цветом (6 заменить) |
Kuzmich, да, проблема была именно в этом, макрос просто не выполнялся что ж, всем большое спасибо и огромный «+» в карму! vdovin_sg, k61, Kuzmich Уж больно здесь красиво, жди беды.. |
|
alcnwndrlnd Пользователь Сообщений: 44 |
#15 08.12.2015 11:47:50 Kuzmich, и, наверное, последний вопрос.. Возможно, глупый: как проверить несколько значений и раскрасить одним цветом:
Изменено: alcnwndrlnd — 08.12.2015 11:48:18 Уж больно здесь красиво, жди беды.. |
||
Kuzmich Пользователь Сообщений: 7998 |
#16 08.12.2015 11:51:05
|
||
Kuzmich, «а ларчик просто открывался» спасибо еще раз, огромное Уж больно здесь красиво, жди беды.. |
|
alcnwndrlnd Пользователь Сообщений: 44 |
#18 08.12.2015 12:08:28 Kuzmich, потревожу Вас еще раз. Не получается добавить просмотр следующего интересующего меня столбца, после прохождения первого
так? Уж больно здесь красиво, жди беды.. |
||
Михаил Лебедев Пользователь Сообщений: 2855 |
#19 08.12.2015 12:22:39 попробуйте так:
Изменено: Михаил Лебедев — 10.12.2015 11:57:00 Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
||
Уж больно здесь красиво, жди беды.. |
|
Kuzmich Пользователь Сообщений: 7998 |
#21 08.12.2015 12:42:39
|
||
Kuzmich, пробовала, второй столбец не красит, но и ошибку не выдает Уж больно здесь красиво, жди беды.. |
|
Kuzmich Пользователь Сообщений: 7998 |
#23 08.12.2015 12:46:23
|
||
Файл выложите. И/или поменяйте строку в моем коде, как предложил «кузмич» (я в своем предыдущем — поменял) Изменено: Михаил Лебедев — 08.12.2015 13:04:02 Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
|
Kuzmich Пользователь Сообщений: 7998 |
#25 08.12.2015 13:04:42
Какой столбец? Когда подсвечивается вся строка. |
||
Kuzmich Пользователь Сообщений: 7998 |
Cells(i,2) — это будет второй столбец |
Михаил Лебедев Пользователь Сообщений: 2855 |
#27 08.12.2015 13:20:58
Изменено: Михаил Лебедев — 08.12.2015 13:21:20 Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
||
Юрий М Модератор Сообщений: 60579 Контакты см. в профиле |
alcnwndrlnd и vdovin_sg, код следует оформлять тегом — ищите такую кнопку (см. скрин). |
alcnwndrlnd Пользователь Сообщений: 44 |
#29 08.12.2015 13:46:53
Да, по условию. Сейчас попробую с исправлениями Уж больно здесь красиво, жди беды.. |
||
alcnwndrlnd Пользователь Сообщений: 44 |
#30 08.12.2015 14:39:05 Михаил Лебедев, спасибо! Kuzmich, и снова, еще раз спасибо! во всем разобралась, все работает, как надо
Изменено: alcnwndrlnd — 08.12.2015 14:39:41 Уж больно здесь красиво, жди беды.. |
||
Изменение цвета текста (шрифта) в ячейке рабочего листа Excel с помощью кода VBA. Свойства ячейки (диапазона) .Font.Color, .Font.ColorIndex и .Font.TintAndShade.
Использование цветовой палитры для присвоения цвета тексту в ячейке листа Excel аналогично присвоению цвета фону ячейки, только свойство диапазона .Interior меняем на свойство .Font.
Цвет текста и предопределенные константы
Цвет шрифту в ячейке можно присвоить с помощью предопределенных констант:
Range(«A1:C3»).Font.Color = vbGreen Range(Cells(4, 1), Cells(6, 3)).Font.Color = vbBlue Cells(7, 1).Font.Color = vbRed |
Напомню, что вместо индексов строк и столбцов можно использовать переменные. Список предопределенных констант смотрите здесь.
Цвет шрифта и модель RGB
Для изменения цвета текста в ячейке можно использовать цветовую модель RGB:
Range(«A1»).Font.Color = RGB(200, 150, 250) Cells(2, 1).Font.Color = RGB(200, 150, 100) |
Аргументы функции RGB могут принимать значения от 0 до 255. Если все аргументы равны 0, цвет — черный, если все аргументы равны 255, цвет — белый. Функция RGB преобразует числовые значения основных цветов (красного, зеленого и синего) в индекс основной палитры.
Список стандартных цветов с RGB-кодами смотрите в статье: HTML. Коды и названия цветов.
Свойство .Font.ColorIndex
Свойство .Font.ColorIndex может принимать значения от 1 до 56. Это стандартная ограниченная палитра, которая существовала до Excel 2007 и используется до сих пор. Посмотрите примеры:
Range(«A1:D6»).Font.ColorIndex = 5 Cells(1, 6).Font.ColorIndex = 12 |
Таблица соответствия значений ограниченной палитры цвету:
Стандартная палитра Excel из 56 цветов
Подробнее о стандартной палитре Excel смотрите в статье: Стандартная палитра из 56 цветов.
Свойство .Font.ThemeColor
Свойство .Font.ThemeColor может принимать числовые или текстовые значения констант из коллекции MsoThemeColorIndex:
Range(«A1»).Font.ThemeColor = msoThemeColorHyperlink Cells(2, 1).Font.ThemeColor = msoThemeColorAccent4 |
Основная палитра
Основная палитра, начиная c Excel 2007, состоит из 16777216 цветов. Свойство .Font.Color может принимать значения от 0 до 16777215, причем 0 соответствует черному цвету, а 16777215 — белому.
Cells(1, 1).Font.Color = 0 Cells(2, 1).Font.Color = 6777215 Cells(3, 1).Font.Color = 4569325 |
Отрицательные значения свойства .Font.Color
При записи в Excel макрорекордером макроса с присвоением шрифту цвета используются отрицательные значения свойства .Font.Color, которые могут быть в пределах от -16777215 до -1. Отрицательные значения соответствуют по цвету положительному значению, равному сумме наибольшего индекса основной палитры и данного отрицательного значения. Например, отрицательное значение -8257985 соответствует положительному значению 8519230, являющегося результатом выражения 16777215 + (-8257985). Цвета текста двух ячеек из следующего кода будут одинаковы:
Cells(1, 1).Font.Color = —8257985 Cells(2, 1).Font.Color = 8519230 |
Свойство .Font.TintAndShade
Еще при записи макроса с присвоением шрифту цвета макрорекордером добавляется свойство .Font.TintAndShade, которое осветляет или затемняет цвет и принимает следующие значения:
- -1 — затемненный;
- 0 — нейтральный;
- 1 — осветленный.
При тестировании этого свойства в Excel 2016, сравнивая затемненные и осветленные цвета, разницы не заметил. Сравните сами:
Sub Test() With Range(Cells(1, 1), Cells(3, 1)) .Value = «Сравниваем оттенки» .Font.Color = 37985 End With Cells(1, 1).Font.TintAndShade = —1 Cells(2, 1).Font.TintAndShade = 0 Cells(3, 1).Font.TintAndShade = 1 End Sub |
В первые три ячейки первого столбца записывается одинаковый текст для удобства сравнения оттенков.
Разноцветный текст в ячейке
Отдельным частям текста в ячейке можно присвоить разные цвета. Для этого используется свойство Range.Characters:
Sub Test() With Range(«A1») .Font.Color = vbBlack .Value = «Океан — Солнце — Оазис» .Font.Size = 30 .Characters(1, 5).Font.Color = vbBlue .Characters(9, 6).Font.Color = RGB(255, 230, 0) .Characters(18, 5).Font.Color = RGB(119, 221, 119) End With End Sub |
Результат работы кода:
В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц 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-макросов. Уверен, что теперь вы сможете самостоятельно найти практическое применение этим исходным кодам.
alcnwndrlnd 0 / 0 / 0 Регистрация: 08.12.2015 Сообщений: 12 |
||||
1 |
||||
Изменить цвет строки в соответствии с значением в ячейке08.12.2015, 09:37. Показов 3973. Ответов 2 Метки нет (Все метки)
Всем привет!
0 |
15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
|
08.12.2015, 11:33 |
2 |
alcnwndrlnd, почему не условное форматирование?
1 |
alcnwndrlnd 0 / 0 / 0 Регистрация: 08.12.2015 Сообщений: 12 |
||||
08.12.2015, 11:42 [ТС] |
3 |
|||
Казанский, для большого количества значений код слишком громоздкий, и останавливается на полпути. Условное форматирование не подходит из-за того, что каждый раз задавать его придется. Спасибо ребятам с форума planetexcel, в частности Kuzmich, k61, vdovin_sg. Код Kuzmich:
Тему можно считать закрытой.
0 |
У Вас лишняя буква r прицепилась
.Interior.Color = vbRed
.Interior.Color = RGB(255, 0, 0)
.Interior.Color = 255
Работа с объектами листа медленная. Если ячеек много и заливать нужно не целым диапазоном, можно обработать в памяти и залить ячейки одной командой.
Sub PaintCells()
Dim r1 As Range, r2 As Range
Dim c As Range
Set r1 = Range("A1:C10") ' диапазон в переменную
r1.Interior.Pattern = xlNone ' убираем заливку
' r1.Interior.ColorIndex = 0 ' или так
For Each c In r1 ' цикл по ячейкам диапазона
If c.Value = 25 Then ' если условие выполняется
If r2 Is Nothing Then ' диапазон еще пустой
Set r2 = c ' формируем диапазон
Else
Set r2 = Union(r2, c) ' пополняем диапазон
End If
End If
Next c
If Not r2 Is Nothing Then r2.Interior.Color = 255 ' заливаем
Set r1 = Nothing: Set r2 = Nothing ' освобождаем память
End Sub
Залить строки по условию в ячейке:
For i = 1 To r1.Rows.Count ' цикл по строкам диапазона
If r1(i, 1).Value = 25 Then ' если левая ячейка диапазона...
If r2 Is Nothing Then ' диапазон еще пустой
Set r2 = Range(Cells(i, 1), Cells(i, 3)) ' формируем диапазон
Else
Set r2 = Union(r2, Range(Cells(i, 1), Cells(i, 3))) ' пополняем диапазон
End If
End If
Next i
День добрый.
У меня есть скрипт для окрашивания ячеек с дубликатами в разные цвета:
Sub ВыделитьДубликатыРазнымиЦветами()
On Error Resume Next
' массив цветов, используемых для заливки ячеек-дубликатов
Colors = Array(12900829, 15849925, 14408946, 14610923, 15986394, 14281213, 14277081, _
9944516, 14994616, 12040422, 12379352, 15921906, 14336204, 15261367, 14281213)
Dim coll As New Collection, dupes As New Collection, _
cols As New Collection, ra As Range, cell As Range, n&
Err.Clear: Set ra = Intersect(Selection, ActiveSheet.UsedRange)
If Err Then Exit Sub
ra.Interior.ColorIndex = xlColorIndexNone: Application.ScreenUpdating = False
For Each cell In ra.Cells ' запонимаем значение дубликатов в коллекции dupes
Err.Clear: If Len(Trim(cell)) Then coll.Add CStr(cell.Value), CStr(cell.Value)
If Err Then dupes.Add CStr(cell.Value), CStr(cell.Value)
Next cell
For i& = 1 To dupes.Count ' заполняем коллекцию cols цветами для разных дубликатов
n = n Mod (UBound(Colors) + 1): cols.Add Colors(n), dupes(i): n = n + 1
Next
For Each cell In ra.Cells ' окрашиваем ячейки, если для её значения назначен цвет
cell.Interior.color = cols(CStr(cell.Value))
Next cell
Application.ScreenUpdating = True
End Sub
Как сделать так, чтобы этот код красил не только ячейку, но и весь ряд? Спасибо.
Закрашивание строки цветом исходя из активной ячейки |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |