Как полностью раскрасить таблицу Excel красивенько, имея только 3 цифры -- RGB
Привет! Совсем недавно я делился своими первыми наработки в области цвета. Я предложил тебе макрос, который создает целые палитры цветов по заданным образцам. Если интересно, можешь глянуть предыдущую статью, но сейчас я предлагаю нечто еще более крутое!
↑ теперь ты сможешь сам раскрасить свою таблицу, преобразив ее в такой стиль. При этом ты можешь использовать абсолютно любой цвет в качестве основного. Для того, чтобы получить цвет тебе понадобится только 3 цифры -- значения RGB -- красного, зеленого и голубого.
RED -- красный
GREEN -- зеленый
BLUE -- синий
Каждый их этих цветов по сути отражает количество света, которое падает на монитор. Значения каждого света может варьироваться от 0 до 255. Если все три света будут равны 0, то ты получишь черный цвет -- отсутствие света. Если каждый будет равен 255 -- максимальному значению -- то ты получишь белый цвет. Все логично. Я немного исследовал этот вопрос и написал следующий макрос.
В макросе предусмотрено 2 стиля. Первый применяется, если таблица содержит менее пяти колонок. Он попроще:
Если же количество колонок 5 или более, то макрос раскрасит таблицу так:
Если ты немного смыслишь в программировании, то можешь создать свой стиль или целую коллекцию стилей, которые будет применять данный макрос.
Для того, чтобы запустить макрос и попробовать все самому, вставь в свой редактор следующий код:
↑ теперь ты сможешь сам раскрасить свою таблицу, преобразив ее в такой стиль. При этом ты можешь использовать абсолютно любой цвет в качестве основного. Для того, чтобы получить цвет тебе понадобится только 3 цифры -- значения RGB -- красного, зеленого и голубого.
Немного о цветах на экране
Напомню, что все цвета, которые ты видишь на экране, во многих программах принято кодировать тремя цифрами:RED -- красный
GREEN -- зеленый
BLUE -- синий
Каждый их этих цветов по сути отражает количество света, которое падает на монитор. Значения каждого света может варьироваться от 0 до 255. Если все три света будут равны 0, то ты получишь черный цвет -- отсутствие света. Если каждый будет равен 255 -- максимальному значению -- то ты получишь белый цвет. Все логично. Я немного исследовал этот вопрос и написал следующий макрос.
Макрос по созданию своего стиля таблиц
При запуске макрос сперва предложит тебе выбрать диапазон с тремя клетками, где будут вписаны соответствующие параметры RGB. После этого он запомнит твой выбор и попросит выбрать диапазон с самой таблицей. И, наконец, он раскрасит твою таблицу по выбранному образцу!В макросе предусмотрено 2 стиля. Первый применяется, если таблица содержит менее пяти колонок. Он попроще:
Если ты немного смыслишь в программировании, то можешь создать свой стиль или целую коллекцию стилей, которые будет применять данный макрос.
Для того, чтобы запустить макрос и попробовать все самому, вставь в свой редактор следующий код:
Option Explicit
Sub СделатьСтильТаблицы()
'
' СделатьСтильТаблицы Макрос
'
'
Dim rR As Range, cel As Range, nR As Range
Dim i As Integer, x As Long, y As Long
Dim Col(3) As Long
Dim Avg As Long
Dim R As Long, G As Long, B As Long
Dim Rt As Long, Gt As Long, Bt As Long
Dim h As Long, l As Long
' просим указать диапазон РЖБ
Application.DisplayAlerts = False
On Error Resume Next
Set rR = Application.InputBox("Выбери диапазон " & _
"RGB, 3 ячейки:", "Выбор", Type:=8)
Application.DisplayAlerts = True
' проверка правильности выбора диапазона
If rR.Cells.Count <> 3 Then
MsgBox "Выбранный диапазон должен содержать 3 ячейки", _
vbCritical, "Останавливаю макрос =("
Exit Sub
End If
On Error GoTo 0
'запускаем присвоение базовых цветов
i = 1
For Each cel In rR
If Not IsNumeric(cel) Then
Col(i) = 255
Else
Col(i) = cel
End If
i = i + 1
Next
' Запуск проверки на светлоту и темноту
Avg = _
Application.WorksheetFunction.Average(Col(1), Col(2), Col(3))
Select Case Avg
Case Is > 210
R = Int((Col(1) * 630) / (Col(1) + Col(2) + Col(3)))
G = Int((Col(2) * 630) / (Col(1) + Col(2) + Col(3)))
B = Int((Col(3) * 630) / (Col(1) + Col(2) + Col(3)))
Case 0
R = 140
G = 140
B = 140
Case Is < 65
R = Int((Col(1) * 195) / (Col(1) + Col(2) + Col(3)))
G = Int((Col(2) * 195) / (Col(1) + Col(2) + Col(3)))
B = Int((Col(3) * 195) / (Col(1) + Col(2) + Col(3)))
Case Else
R = Col(1)
G = Col(2)
B = Col(3)
End Select
' просим указать диапазон с таблицей
Application.DisplayAlerts = False
On Error Resume Next
Set nR = Application.InputBox("Выдели таблицу, " & _
"которую будем красить", "Выбор", Type:=8)
Application.DisplayAlerts = True
' проверка правильности выбора диапазона
If nR.Cells.Count = 0 Then
MsgBox "Выбранный диапазон не может быть пустым", _
vbCritical, "Останавливаю макрос =("
Exit Sub
End If
On Error GoTo 0
'определяем ширину и высоту диапазона
h = nR.Rows.Count
l = nR.Columns.Count
' К - Р - А - С - И - М !
' если выбрана одна строка, то красим ее в ключевой цвет
If h = 1 Then
nR.Interior.Color = RGB(R, G, B)
Exit Sub
End If
'перебираем все клетки, красим внутренность
For x = 1 To l
For y = 1 To 3
Select Case x Mod 2 + (y Mod 2) * 10
Case 11
i = 10
Rt = R + Int((255 - R) * i * 0.05)
Gt = G + Int((255 - G) * i * 0.05)
Bt = B + Int((255 - B) * i * 0.05)
nR(y, x).Interior.Color = RGB(Rt, Gt, Bt)
Case 10
i = 7
Rt = R + Int((255 - R) * i * 0.05)
Gt = G + Int((255 - G) * i * 0.05)
Bt = B + Int((255 - B) * i * 0.05)
nR(y, x).Interior.Color = RGB(Rt, Gt, Bt)
Case 1
i = 8
Rt = R + Int((255 - R) * i * 0.05)
Gt = G + Int((255 - G) * i * 0.05)
Bt = B + Int((255 - B) * i * 0.05)
nR(y, x).Interior.Color = RGB(Rt, Gt, Bt)
Case 0
i = 5
Rt = R + Int((255 - R) * i * 0.05)
Gt = G + Int((255 - G) * i * 0.05)
Bt = B + Int((255 - B) * i * 0.05)
nR(y, x).Interior.Color = RGB(Rt, Gt, Bt)
End Select
Next y
Next x
'если таблица содержит более 4 колонок, красим веселее
If l > 4 Then
For x = 1 To l
For y = 1 To 3
Select Case x Mod 2 + (y Mod 2) * 10 + x * 100
Case 111
i = 14
Rt = R + Int((255 - R) * i * 0.05)
Gt = G + Int((255 - G) * i * 0.05)
Bt = B + Int((255 - B) * i * 0.05)
nR(y, x).Interior.Color = RGB(Rt, Gt, Bt)
Case 101
i = 13
Rt = R + Int((255 - R) * i * 0.05)
Gt = G + Int((255 - G) * i * 0.05)
Bt = B + Int((255 - B) * i * 0.05)
nR(y, x).Interior.Color = RGB(Rt, Gt, Bt)
Case nR.Columns.Count * 100 + 1
With nR(y, x).Interior
.Pattern = xlPatternLinearGradient
.Gradient.Degree = 0
.Gradient.ColorStops.Clear
End With
i = 1
With nR(y, x).Interior.Gradient.ColorStops.Add(0)
.Color = RGB(R + Int((255 - R) * i * 0.05), _
G + Int((255 - G) * i * 0.05), _
B + Int((255 - B) * i * 0.05))
.TintAndShade = 0
End With
i = 5
With nR(y, x).Interior.Gradient.ColorStops.Add(1)
.Color = RGB(R + Int((255 - R) * i * 0.05), _
G + Int((255 - G) * i * 0.05), _
B + Int((255 - B) * i * 0.05))
.TintAndShade = 0
End With
Case nR.Columns.Count * 100 + 11
With nR(y, x).Interior
.Pattern = xlPatternLinearGradient
.Gradient.Degree = 0
.Gradient.ColorStops.Clear
End With
i = 0
With nR(y, x).Interior.Gradient.ColorStops.Add(0)
.Color = RGB(R + Int((255 - R) * i * 0.05), _
G + Int((255 - G) * i * 0.05), _
B + Int((255 - B) * i * 0.05))
.TintAndShade = 0
End With
i = 4
With nR(y, x).Interior.Gradient.ColorStops.Add(1)
.Color = RGB(R + Int((255 - R) * i * 0.05), _
G + Int((255 - G) * i * 0.05), _
B + Int((255 - B) * i * 0.05))
.TintAndShade = 0
End With
End Select
Next y
Next x
End If
'перебираем все клетки, красим шапку
For x = 1 To l
With nR(1, x).Interior
.Pattern = xlPatternLinearGradient
.Gradient.Degree = 90
.Gradient.ColorStops.Clear
End With
i = 7
With nR(1, x).Interior.Gradient.ColorStops.Add(0)
.Color = RGB(Int(R * (1 - i * 0.05)), _
Int(G * (1 - i * 0.05)), _
Int(B * (1 - i * 0.05)))
.TintAndShade = 0
End With
i = 9
With nR(1, x).Interior.Gradient.ColorStops.Add(1)
.Color = RGB(Int(R * (1 - i * 0.05)), _
Int(G * (1 - i * 0.05)), _
Int(B * (1 - i * 0.05)))
.TintAndShade = 0
End With
With nR(1, x).Font
.Bold = True
.ThemeColor = xlThemeColorDark1
End With
Next x
'если колонок > 4, красим шапку еще немного
If l > 4 Then
i = 9
With nR(1, l).Interior.Gradient.ColorStops.Add(0)
.Color = RGB(Int(R * (1 - i * 0.05)), _
Int(G * (1 - i * 0.05)), _
Int(B * (1 - i * 0.05)))
.TintAndShade = 0
End With
i = 11
With nR(1, l).Interior.Gradient.ColorStops.Add(1)
.Color = RGB(Int(R * (1 - i * 0.05)), _
Int(G * (1 - i * 0.05)), _
Int(B * (1 - i * 0.05)))
.TintAndShade = 0
End With
End If
' раскрашиваем по образцу, думаю, это ускорит работу макроса
nR.Rows("2:3").Copy
nR.Rows("2:" & h).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Хотелось бы немного раскрыть карты и рассказать о том, как я работаю с цветом. Во-первых, проведя ряд экспериментов, я понял, что некоторые цвета слишком темные, а некоторые -- наоборот -- слишком светлые. У светлых среднее значение RGB более 210. Их я умышленно затемняю для получения ключевых параметров. Темные цвета содержат мало света, их среднее значение RGB менее 65. Их я осветляю. Потом уже идет сама раскраска. Красим в светлые тона внутренность таблицы и в темные ее шапку -- мне так нравится. Буду очень рад, если кто-нибудь из умельцев в программировании создаст и предоставит мне код для создания собственных стилей. Может быть, это будет стиль на базе двух и более цветов. Экспериментируй!И еще одно небольшое наблюдение для любознательных. Если на один и тот же процент менять значения RGB, то получим оттенки этого цвета: более светлые или темные. Если же изменить пропорцию RGB, то получим другой цвет! В этом ключ к созданию различных сочетаний. Думаю, что красивые сочетания цветов имеют определенный код, разгадав который, можно создавать новые образцы.
Где искать цвета
Я бы хотел сказать "Черпай вдохновение в природе!", но вместо этого предлагаю исследовать этот сайт. Еще мне была полезна просто статья в Википедии про RGB. Изначально же меня впечатлили таблицы из этой статьи.Всё!
uanidmar-a_Kansas City Clayton Jones https://wakelet.com/wake/4JjGvxqZGuCzo5crIVDoE
ОтветитьУдалитьadabsmoulsub
Npodtenmul-re Luke Muller VMware Player
ОтветитьУдалитьAdobe XD
Sketchup
clasallami