Установите цвет фона ячейки в соответствии со значениями RGB.Как? - PullRequest
3 голосов
/ 28 сентября 2019

Ниже приведен скриншот того, чего я надеюсь достичь другими способами, чем копирование и вставка вручную.

Это цветовая палитра с дизайном материала, и она отлично смотрится в Excel.

Как пройти цикл в диапазоне B2: B15 и установить для цвета фона каждой ячейки соответствующий соответствующий цвет?

Возможно, цикл VBA для прохождения по вертикальному диапазону ячеек , , разбор содержимого каждой ячейки, и установка для * background-color ячейки равным значение RGB , которое содержит ячейка .

Таким образом, ячейка RED-50, содержащая rgb (255, 235, 238) становится ...

Range("B2").Interior.Color = RGB(255, 235, 238)

image1


ОБНОВЛЕНИЕ!

Спасибо всем за помощь.Ниже ссылка на диск Google на палитру материалов Excel, которую вы мне помогли создать.

Нажмите Control + M для активации.

material.design.colors.xlsm

Таким образом, ВСЕ ЦВЕТА становятся собой.

image2

Ответы [ 3 ]

2 голосов
/ 28 сентября 2019

Простое решение без использования регулярных выражений:

Sub test()
    Dim r As Range
    For Each r In Range("B1:B10")
        r.Interior.Color = StringToRGB(r.Text)
    Next
End Sub

Public Function StringToRGB(s As String) As Long
    Dim parts
    s = Mid(s, 5, Len(s) - 5)
    s = Replace(s, " ", "")
    parts = Split(s, ",")
    StringToRGB = RGB(CInt(parts(0)), CInt(parts(1)), CInt(parts(2)))
End Function
1 голос
/ 28 сентября 2019

Это разбивает содержимое в скобках на три элемента в массиве вариантов и использует функцию RGB, чтобы применить их к ячейкам.Вы захотите добавить проверку ошибок, чтобы убедиться, что ячейка содержит действительные значения RGB.

Sub ApplyColor()
Dim cell As Excel.Range
Dim RGBs As Variant

For Each cell In ActiveSheet.Range("B2:B15")
   RGBs = Split(Replace(Replace(cell.Value, "rgb(", ""), ")", ""), ",")
   cell.Interior.Color = RGB(RGBs(0), RGBs(1), RGBs(2))
Next cell
End Sub
1 голос
/ 28 сентября 2019

Может быть, что-то подобное?Я не мог передать значение ячейки в Interior.Color, поэтому я решил использовать Split для извлечения каждого цвета по отдельности.Отрегулируйте Sheet1 при необходимости.

Sub InteriorColor()
    Dim rngCell As Excel.Range
    Dim varColors As Variant
    Dim lngR As Long, lngG As Long, lngB As Long

    For Each rngCell In Sheet1.Range("B2:B15")
        varColors = Split(rngCell.Value, ",")
        lngR = Right(varColors(0), Len(varColors(0)) - 4)
        lngG = Trim(varColors(1))
        lngB = Left(varColors(2), Len(varColors(2)) - 1)

        rngCell.Interior.Color = RGB(lngR, lngG, lngB)
    Next rngCell
End Sub

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...