Шарик Пользователь Сообщений: 25 |
Здравствуйте. |
New Пользователь Сообщений: 4582 |
#2 28.04.2021 15:03:33 попробуйте так
Изменено: New — 28.04.2021 15:03:49 |
||
Шарик Пользователь Сообщений: 25 |
#3 28.04.2021 15:06:27
А если мне нужен цвет конкретной ячейки, а не активной? |
||
БМВ Модератор Сообщений: 21385 Excel 2013, 2016 |
#4 28.04.2021 15:11:18
По вопросам из тем форума, личку не читаю. |
||
Marat Ta Пользователь Сообщений: 440 |
Ну наверное так Cells(1,1)….. |
Шарик Пользователь Сообщений: 25 |
БМВ, |
New Пользователь Сообщений: 4582 |
#7 28.04.2021 15:14:04
в цикле так
Изменено: New — 28.04.2021 15:15:47 |
||||
Шарик Пользователь Сообщений: 25 |
Очень выручили! Огромнейшее спасибо. БМВ, Хотя с Range(A1) пройдёт, наверное и Ваш вариант. |
New Пользователь Сообщений: 4582 |
#9 28.04.2021 15:17:07
Изменено: New — 28.04.2021 15:23:25 |
||||
Kuzmich Пользователь Сообщений: 7998 |
#10 28.04.2021 15:19:03
|
||
vikttur Пользователь Сообщений: 47199 |
|
Шарик Пользователь Сообщений: 25 |
Всем Огромнейшее спасибо! |
New Пользователь Сообщений: 4582 |
#13 28.04.2021 15:32:39
P.S. Вам надо научится включать «Запись макроса», делать желаемые действия на листе, а потом смотреть записанный программой код. Прикрепленные файлы
Изменено: New — 28.04.2021 15:34:48 |
||
Шарик Пользователь Сообщений: 25 |
New, Большое спасибо. |
New Пользователь Сообщений: 4582 |
#15 28.04.2021 15:36:37
Как вы думаете я пишу все эти коды, которые я показал вам в каждом своём сообщении? Изменено: New — 28.04.2021 15:38:07 |
||
Шарик Пользователь Сообщений: 25 |
New, |
Шарик Пользователь Сообщений: 25 |
#17 28.04.2021 15:39:14
Ключевое слово-то вот. Боюсь, у меня пока слишком мало опыта, чтобы правильно скорректировать |
||
vikttur Пользователь Сообщений: 47199 |
Пиркафф, зато у Вас уже огромный опыт по троллингу форумов |
New Пользователь Сообщений: 4582 |
в записи макроса я заменяю слово Selection на Range(«A1»). Это не сложно и для вас Изменено: New — 28.04.2021 15:42:47 |
Шарик Пользователь Сообщений: 25 |
vikttur, Вы ошибаетесь. Просто я пишу код в эксель аналогичный тому, который я писал также не без помощи в Опенофис. Изменено: Шарик — 28.04.2021 15:43:36 |
Шарик Пользователь Сообщений: 25 |
New, Ещё раз Огромнейшее Спасибо! |
БМВ Модератор Сообщений: 21385 Excel 2013, 2016 |
#22 28.04.2021 16:22:16
с этим точно не пройдет, но вроде я и не высмеивал, написал как есть.
Если оно так , то почему еще жив? По вопросам из тем форума, личку не читаю. |
||||
sokol92 Пользователь Сообщений: 4445 |
#23 28.04.2021 16:32:31 Никогда не использую нелатинские буквы для идентификаторов, но:
Владимир |
||
Евгений Смирнов Пользователь Сообщений: 539 |
#24 28.04.2021 19:03:40 Обучение прошло успешно. Ура!!! |
Заливка ячейки цветом в VBA Excel. Фон ячейки. Свойства .Interior.Color и .Interior.ColorIndex. Цветовая модель RGB. Стандартная палитра. Очистка фона ячейки.
Свойство .Interior.Color объекта Range
Начиная с Excel 2007 основным способом заливки диапазона или отдельной ячейки цветом (зарисовки, добавления, изменения фона) является использование свойства .Interior.Color объекта Range путем присваивания ему значения цвета в виде десятичного числа от 0 до 16777215 (всего 16777216 цветов).
Заливка ячейки цветом в VBA Excel
Пример кода 1:
Sub ColorTest1() Range(«A1»).Interior.Color = 31569 Range(«A4:D8»).Interior.Color = 4569325 Range(«C12:D17»).Cells(4).Interior.Color = 568569 Cells(3, 6).Interior.Color = 12659 End Sub |
Поместите пример кода в свой программный модуль и нажмите кнопку на панели инструментов «Run Sub» или на клавиатуре «F5», курсор должен быть внутри выполняемой программы. На активном листе Excel ячейки и диапазон, выбранные в коде, окрасятся в соответствующие цвета.
Есть один интересный нюанс: если присвоить свойству .Interior.Color отрицательное значение от -16777215 до -1, то цвет будет соответствовать значению, равному сумме максимального значения палитры (16777215) и присвоенного отрицательного значения. Например, заливка всех трех ячеек после выполнения следующего кода будет одинакова:
Sub ColorTest11() Cells(1, 1).Interior.Color = —12207890 Cells(2, 1).Interior.Color = 16777215 + (—12207890) Cells(3, 1).Interior.Color = 4569325 End Sub |
Проверено в Excel 2016.
Вывод сообщений о числовых значениях цветов
Числовые значения цветов запомнить невозможно, поэтому часто возникает вопрос о том, как узнать числовое значение фона ячейки. Следующий код VBA Excel выводит сообщения о числовых значениях присвоенных ранее цветов.
Пример кода 2:
Sub ColorTest2() MsgBox Range(«A1»).Interior.Color MsgBox Range(«A4:D8»).Interior.Color MsgBox Range(«C12:D17»).Cells(4).Interior.Color MsgBox Cells(3, 6).Interior.Color End Sub |
Вместо вывода сообщений можно присвоить числовые значения цветов переменным, объявив их как Long.
Использование предопределенных констант
В VBA Excel есть предопределенные константы часто используемых цветов для заливки ячеек:
Предопределенная константа | Наименование цвета |
---|---|
vbBlack | Черный |
vbBlue | Голубой |
vbCyan | Бирюзовый |
vbGreen | Зеленый |
vbMagenta | Пурпурный |
vbRed | Красный |
vbWhite | Белый |
vbYellow | Желтый |
xlNone | Нет заливки |
Присваивается цвет ячейке предопределенной константой в VBA Excel точно так же, как и числовым значением:
Пример кода 3:
Range(«A1»).Interior.Color = vbGreen |
Цветовая модель RGB
Цветовая система RGB представляет собой комбинацию различных по интенсивности основных трех цветов: красного, зеленого и синего. Они могут принимать значения от 0 до 255. Если все значения равны 0 — это черный цвет, если все значения равны 255 — это белый цвет.
Выбрать цвет и узнать его значения RGB можно с помощью палитры Excel:
Палитра Excel
Чтобы можно было присвоить ячейке или диапазону цвет с помощью значений RGB, их необходимо перевести в десятичное число, обозначающее цвет. Для этого существует функция VBA Excel, которая так и называется — RGB.
Пример кода 4:
Range(«A1»).Interior.Color = RGB(100, 150, 200) |
Список стандартных цветов с RGB-кодами смотрите в статье: HTML. Коды и названия цветов.
Очистка ячейки (диапазона) от заливки
Для очистки ячейки (диапазона) от заливки используется константа xlNone
:
Range(«A1»).Interior.Color = xlNone |
Свойство .Interior.ColorIndex объекта Range
До появления Excel 2007 существовала только ограниченная палитра для заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до 56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с помощью свойства .Interior.ColorIndex:
Пример кода 5:
Range(«A1»).Interior.ColorIndex = 8 MsgBox Range(«A1»).Interior.ColorIndex |
Просмотреть ограниченную палитру для заливки ячеек фоном можно, запустив в VBA Excel простейший макрос:
Пример кода 6:
Sub ColorIndex() Dim i As Byte For i = 1 To 56 Cells(i, 1).Interior.ColorIndex = i Next End Sub |
Номера строк активного листа от 1 до 56 будут соответствовать индексу цвета, а ячейка в первом столбце будет залита соответствующим индексу фоном.
Подробнее о стандартной палитре Excel смотрите в статье: Стандартная палитра из 56 цветов, а также о том, как добавить узор в ячейку.
Продолжу тему:
Вышеприведённые примеры работают только при отсутствии условного форматирования на исследуемой ячейке. Если же цвет заливки изменён условным форматированием, например:
Visual Basic | ||
|
Если, скажем, в ячейке А10 будет находиться «J» (без кавычек), эта ячейка будет синяя (код цвета 15773696), а Вышеприведённые примеры покажут «0».
Может кто подскажет, как определить ВИДИМЫЙ цвет ячейки?
Кстати: автофильтр по цвету учитывает именно ВИДИМЫЙ цвет, но понять из записанного макроса как определить цвет конкретной ячейки не представляется возможным:
Visual Basic | ||
|
Here are some small functions for you. From your sheet, press Alt—F11 to reach the VBA editor, insert a new module, paste the below code, go back to your worksheet and use them by their names, like in =FillColor(A1)
The first two are the promised «3-liners» giving decimal values for font and background colors — not very useful though
The second pair converts the decimal number to RGB and returns a string of format N, N, N
The third pair are array formulas — select 3 cells in a row, enter the formula and press Ctrl+Shift+Enter to obtain numeric RGB values in 3 neighboring cells
Function FillColor(Target As Range) As Variant
FillColor = Target.Interior.Color
End Function
Function FontColor(Target As Range) As Variant
FontColor = Target.Font.Color
End Function
Function FillColorRGB(Target As Range) As Variant
Dim N As Double
N = Target.Interior.Color
FillColorRGB = Str(N Mod 256) & ", " & Str(Int(N / 256) Mod 256) & ", " & Str(Int(N / 256 / 256) Mod 256)
End Function
Function FontColorRGB(Target As Range) As Variant
Dim N As Double
N = Target.Font.Color
FontColorRGB = Str(N Mod 256) & ", " & Str(Int(N / 256) Mod 256) & ", " & Str(Int(N / 256 / 256) Mod 256)
End Function
Function FillColorRGBArray(Target As Range) As Variant
Dim N As Double, A(3) As Integer
N = Target.Interior.Color
A(0) = N Mod 256
A(1) = Int(N / 256) Mod 256
A(2) = Int(N / 256 / 256) Mod 256
FillColorRGBArray = A
End Function
Function FontColorRGBArray(Target As Range) As Variant
Dim N As Double, A(3) As Integer
N = Target.Font.Color
A(0) = N Mod 256
A(1) = Int(N / 256) Mod 256
A(2) = Int(N / 256 / 256) Mod 256
FontColorRGBArray = A
End Function
A word of caution: changing the color of a cell does not start recalculation by the above functions/formulas, as recoloring a cell in general is not supposed to drive recalculation. You have to manually start a full recalculation using Ctrl+Alt+Shift+F9
Alternatively, if you do not want to use Macros or VBA, you can get the Cell Color using Aspose.Cells API.
Cell Color or Cell Fill Color is represented by
- Cell>Style>ForegroundColor
Cell Font Color is represented by
- Cell>Style>Font>Color
Sample Excel file used inside the Code
Please consider the following sample Excel file shown inside the snapshot. Here the cell C4 is filled with Yellow color and its font color is Red.
The following code in C# and Java loads the sample Excel file as shown above and accesses the cell C4 and its Style object. Then it prints the cell fill color i.e. Yellow and cell font color i.e. Red.
Please also see the Console Output given below and read the Comments inside the code for more understanding.
C#
// Directory path for input Excel file.
string dirPath = "D:/Download/";
// Load the input Excel file inside workbook object.
Aspose.Cells.Workbook wb = new Workbook(dirPath + "SampleExcelColor.xlsx");
// Access first worksheet.
Worksheet ws = wb.Worksheets[0];
// Access cell C4 by name.
Cell cell = ws.Cells["C4"];
// Access cell style.
Style st = cell.GetStyle();
// Print fill color of the cell i.e. Yellow.
// Please note, Yellow is (R=255, G=255, B=0)
Console.WriteLine(st.ForegroundColor);
// Print font color of the cell i.e. Red.
// Please note, Red is (R=255, G=0, B=0)
Console.WriteLine(st.Font.Color);
Console Output — C#
Color [A=255, R=255, G=255, B=0]
Color [A=255, R=255, G=0, B=0]
Java
// Directory path for input Excel file.
String dirPath = "D:/Download/";
// Load the input Excel file inside workbook object.
com.aspose.cells.Workbook wb = new Workbook(dirPath + "SampleExcelColor.xlsx");
// Access first worksheet.
Worksheet ws = wb.getWorksheets().get(0);
// Access cell C4 by name.
Cell cell = ws.getCells().get("C4");
// Access cell style.
Style st = cell.getStyle();
// Print fill color of the cell i.e. Yellow.
// Please note, Yellow is (R=255, G=255, B=0)
System.out.println(st.getForegroundColor());
// Print font color of the cell i.e. Red.
// Please note, Red is (R=255, G=0, B=0)
System.out.println(st.getFont().getColor());
Console Output — Java
com.aspose.cells.Color@ffffff00
com.aspose.cells.Color@ffff0000