将单元格背景色设置为其包含的RGB值。怎么样?

时间:2019-09-28 15:04:42

标签: excel vba

下面是我希望以手动复制和粘贴以外的方式实现的屏幕截图。

这是材料设计颜色托盘,在Excel中看起来很棒。

如何遍历范围B2:B15并将每个单元格背景色设置为其对应的包含色?

也许是 VBA循环,以遍历垂直B单元格范围解析每个单元格内容,并设置单元格背景颜色单元格包含的 RGB值

因此包含 rgb(255,235,238) 的RED-50单元变为...

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

image1


更新!

感谢大家的帮助。以下是Google驱动器链接到您帮助我构建的Excel材质设计面板。

按Control + M 激活。

material.design.colors.xlsm

所有的颜色都变成了自己。

image2

3 个答案:

答案 0 :(得分:2)

一个无需使用正则表达式的简单解决方案:

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 :(得分:1)

也许是这样吗?我无法将单元格的值传递到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

答案 2 :(得分:1)

这会将括号中的内容分成一个变量数组中的三个元素,并使用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