将单元格背景色设置为其包含的RGB值。如何实现?

4
以下是我希望以手动复制和粘贴以外的方式实现的屏幕截图。
这是Material Design颜色板,它在Excel中看起来非常棒。
如何循环遍历B2:B15范围并将每个单元格的背景颜色设置为其相应的包含颜色?
也许可以使用VBA循环遍历垂直B单元格范围,解析每个单元格的内容,并将单元格的背景色设置为单元格包含的RGB值。
因此,一个包含rgb(255, 235, 238)的红色50单元格变成...
Range("B2").Interior.Color = RGB(255, 235, 238)

image1


更新!

感谢大家的帮助。以下是你们帮我创建的Excel材料设计调色板的Google Drive链接。

按Control + M激活。

material.design.colors.xlsm

这样所有颜色都变成了它们自己。

image2

3个回答

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

一种不需要使用正则表达式的简单解决方案:

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

Keku,我在Dim parts之前添加了On Error Resume Next,因为并非所有的Material Design颜色都具有Alpha选项。例如,Brown、Grey和Blue Grey现在会变成黑色,而不是因为没有可解析的内容而导致错误。 - suchislife

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接