【问题标题】:Set cell background color to its containing RGB values. How?将单元格背景颜色设置为其包含的 RGB 值。如何?
【发布时间】:2020-01-28 13:10:15
【问题描述】:

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

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

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

也许是一个VBA循环来遍历垂直B范围的单元格, 解析每个单元格内容,并设置单元格 background-color 为 单元格包含的 RGB 值

所以一个包含 rgb(255, 235, 238) 的 RED-50 单元格变成...

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


更新!

感谢大家的帮助。以下是您帮助我构建的 Excel 材料设计调色板的 google drive 链接。

按 Control + M 激活。

material.design.colors.xlsm

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    无需借助正则表达式的简单解决方案:

    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
    

    【讨论】:

    • 咳咳,我确实在Dim parts 之前添加了On Error Resume Next,因为并非所有材料设计颜色都有Alpha 选项。例如,Brown、Gray 和 Blue Gray 现在会变成黑色而不是导致错误,因为它们没有可解析的内容。
    【解决方案2】:

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

    结果:

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-11-28
        • 2017-03-26
        • 1970-01-01
        • 2019-07-27
        • 2015-10-21
        • 2017-12-08
        • 2010-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多