Макрос excel как узнать цвет ячейки

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

Здравствуйте.
    Подскажите, пожалуйста, как получить в макросе код цвета ячейки?

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

#2

28.04.2021 15:03:33

попробуйте так

Код
MsgBox ActiveCell.Interior.ColorIndex

Изменено: New28.04.2021 15:03:49

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

#3

28.04.2021 15:06:27

Цитата
New написал:
попробуйте так

А если мне нужен цвет конкретной ячейки, а не активной?

 

БМВ

Модератор

Сообщений: 21385
Регистрация: 28.12.2016

Excel 2013, 2016

#4

28.04.2021 15:11:18

Код
MsgBox конкретнаяячейка.Interior.ColorIndex

По вопросам из тем форума, личку не читаю.

 

Marat Ta

Пользователь

Сообщений: 440
Регистрация: 11.02.2021

Ну наверное так Cells(1,1)…..

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

БМВ,
Медведь на форум, видимо, посмеяться ходит.
Marat Ta,
А если мне номер строки надо буквой i прописать для цикла For?

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

#7

28.04.2021 15:14:04

Код
MsgBox Range("A10").Interior.ColorIndex

в цикле так

Код
Sub test()
Dim i As Long
    
    For i = 1 To 5
        MsgBox Cells(i, "A").Interior.ColorIndex
    Next i
End Sub

Изменено: New28.04.2021 15:15:47

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

Очень выручили! Огромнейшее спасибо.
А если я хочу в макросе назначить цвет ячейке, как будет выглядеть код?

БМВ, Хотя с Range(A1) пройдёт, наверное и Ваш вариант.

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

#9

28.04.2021 15:17:07

Код
Range("A10").Interior.Color = 255 'красный

Код
Range("A10").Interior.ColorIndex = 3 'красный

Изменено: New28.04.2021 15:23:25

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#10

28.04.2021 15:19:03

Код
Cells(i, "A").Interior.ColorIndex=6
 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

Всем Огромнейшее спасибо!
А если мне надо задать в коже цвет шрифта, как тогда будет выглядеть код? И как в коде задать жирный шрифт?

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

#13

28.04.2021 15:32:39

Код
 Range("A1").Font.Bold = True

P.S. Вам надо научится включать «Запись макроса», делать желаемые действия на листе, а потом смотреть записанный программой код.

Прикрепленные файлы

  • Screenshot_1.png (40.5 КБ)

Изменено: New28.04.2021 15:34:48

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

New,  Большое спасибо.
хочется же поизящнее, чем это делает макрорекордер  :)
А если мне надо задать в коже цвет шрифта, как тогда будет выглядеть код?

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

#15

28.04.2021 15:36:37

Код
Range("A1").Font.Color = -16776961

Как вы думаете я пишу все эти коды, которые я показал вам в каждом своём сообщении?
Включаю запись макроса, меняю цвет ячейки, останавливаю макрос, корректирую его и выкладываю вам на форум
и так уже 5-й раз за вас

Изменено: New28.04.2021 15:38:07

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

New,
Ну просто огромнейшее человеческое Вам спасибище!

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

#17

28.04.2021 15:39:14

Цитата
New написал:
корректирую его

Ключевое слово-то вот. Боюсь, у меня пока слишком мало опыта, чтобы правильно скорректировать  :(

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Пиркафф, зато у Вас уже огромный опыт по троллингу форумов

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

в записи макроса я заменяю слово Selection на Range(«A1»). Это не сложно и для вас

Изменено: New28.04.2021 15:42:47

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

vikttur, Вы ошибаетесь. Просто я пишу код в эксель аналогичный тому, который я писал также не без помощи в Опенофис.

Изменено: Шарик28.04.2021 15:43:36

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

New, Ещё раз Огромнейшее Спасибо!

 

БМВ

Модератор

Сообщений: 21385
Регистрация: 28.12.2016

Excel 2013, 2016

#22

28.04.2021 16:22:16

Цитата
Шарик написал:
Хотя с Range(A1) пройдёт, наверное и Ваш вариант.

с этим точно не пройдет, но вроде я и не высмеивал, написал как есть.

Цитата
vikttur написал:
Пиркафф, зато у Вас уже огромный опыт по троллингу форумов

Если оно так , то почему еще жив?

По вопросам из тем форума, личку не читаю.

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#23

28.04.2021 16:32:31

Никогда не использую нелатинские буквы для идентификаторов, но: :)

Код
Sub test()
  Dim конкретнаяячейка As Range
  Set конкретнаяячейка = Range("A1")
  MsgBox конкретнаяячейка.Interior.ColorIndex
End Sub

Владимир

 

Евгений Смирнов

Пользователь

Сообщений: 539
Регистрация: 18.02.2021

#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

Палитра 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
1
2
.Range("A5:A8000").FormatConditions.Add(xlCellValue, 3, "=""J""").Interior.Color = 15773696
.Range("A5:A8000").Interior.Color = 0

Если, скажем, в ячейке А10 будет находиться «J» (без кавычек), эта ячейка будет синяя (код цвета 15773696), а Вышеприведённые примеры покажут «0».
Может кто подскажет, как определить ВИДИМЫЙ цвет ячейки?
Кстати: автофильтр по цвету учитывает именно ВИДИМЫЙ цвет, но понять из записанного макроса как определить цвет конкретной ячейки не представляется возможным:

Visual Basic
1
2
3
4
5
Sub test()
    ActiveSheet.Range("$A$4:$AG$7033").AutoFilter Field:=1, Criteria1:=RGB(153 _
        , 255, 204), Operator:=xlFilterCellColor
    Range("A380").Select
End Sub

Here are some small functions for you. From your sheet, press AltF11 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.

enter image description here


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

Понравилась статья? Поделить с друзьями:
  • Макрос excel поиск файла в папке
  • Макрос excel поиск одинаковых
  • Макрос excel поиск значения в всем
  • Макрос excel поиск данных
  • Макрос excel поиск во всей книге