根据单元格中的 HEX 值设置自动颜色背景?

Posted

技术标签:

【中文标题】根据单元格中的 HEX 值设置自动颜色背景?【英文标题】:Set an automatic color background depending on the HEX value in the cell? 【发布时间】:2016-02-08 05:20:06 【问题描述】:

我发现它可以在向单元格的条件格式规则添加规则时手动完成:但是,当我在单元格上写入 HEX 值时,我希望所有 16,000,000 个 HEX 值颜色自动出现,所以“手动”添加这 16,000,000 个 HEX 值听起来有点太多了!有没有办法让所有 16,000,000 种颜色的阴影自动进入并根据单元格中的 HEX 值将背景颜色应用于单元格?

换句话说,当我在单元格中键入 0000ff 时,我试图获得蓝色背景,然后我希望当单元格的 HEX 值更改时背景更改为相应的颜色 => BGC 更改为红色时输入 ff0000,然后在 00ff00 时为绿色,在 ffffff 时为白色 ...等 16,000,000 及以上颜色可能。

【问题讨论】:

【参考方案1】:

在我看来,第一个答案非常好。我在 VBA 方面不太出名 :) 但是为了避免一些问题,最好以 # 开头的十六进制数字并检查第一个符号是 #,因为我们控制了一个范围,如我所见。然后控制一个全长值等于7个符号,然后计算一个颜色来设置背景。

干杯!

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo bm_Safe_Exit
    Application.EnableEvents = False
    Dim rng As Range, clr As String
    For Each rng In Target
        If Left(rng.Value2, 1) = "#" And Len(rng.Value2) = 7 Then
            clr = Right(rng.Value2, 6)
            rng.Interior.Color = _
              RGB(Application.Hex2Dec(Left(clr, 2)), _
                  Application.Hex2Dec(Mid(clr, 3, 2)), _
                  Application.Hex2Dec(Right(clr, 2)))
        End If
    Next rng

bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

【讨论】:

【参考方案2】:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.count <> 1 Then Exit Sub
    Target.Interior.Color = CLng("&H" & Target.Value)
End Sub

它可以工作,但由于某种原因,基于 BGR,而不是 RGB:ff0000 给出蓝色,0000ff 给出红色:D

【讨论】:

Hex2Dec 上的快捷方式。我这辈子都不记得这样做的快捷方式了。 @Jeeped 大声笑,但请参阅答案末尾的备注。这让我很惊讶:p 非常感谢,会试试看。 我还有一个问题:如何在 Google 电子表格 (excel) 上使用它?我想将我桌面上的 Excel 文档与 Google 电子表格上的文档结合起来......但代码不再适用于 Google 电子表格:(【参考方案3】:

将十六进制转换为RGB 的Worksheet_Change 事件宏应该可以轻松完成此操作。工作表的HEX2DEC function 应该能够处理转换。

右键单击工作表的名称选项卡并选择查看代码。当 VBE 打开时,将以下内容粘贴到标题为 Book1 - Sheet1 (Code) 之类的代码表中。

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo bm_Safe_Exit
    Application.EnableEvents = False
    Dim rng As Range, clr As String
    For Each rng In Target
        If Len(rng.Value2) = 6 Then
            clr = rng.Value2
            rng.Interior.Color = _
              RGB(Application.Hex2Dec(Left(clr, 2)), _
                  Application.Hex2Dec(Mid(clr, 3, 2)), _
                  Application.Hex2Dec(Right(clr, 2)))
        End If
    Next rng

bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

点击 Alt+Q 返回您的工作表。在单元格中键入任意 6 个字符的十六进制代码以提供背景颜色。

        

【讨论】:

您的代码虽然较长,但似乎给出了预期的结果。我没能解释为什么我的反转红色和蓝色。即使我尝试了 Target.Text 而不是 Target.Value! 谢谢,非常感谢。 非常感谢,它在 Excel 上就像一个魅力。是否可以在条件格式规则中添加功能在 Google Excel Sheet 上重现它? @romain - 虽然我不是 Google-Sheet 事件“触发器”方面的专家,但条件格式的工作方式与 Excel 几乎相同。简而言之,由此产生的颜色变化不可能是动态的;它必须预先设置并保持静态。这意味着有必要为您希望能够复制的每种颜色制定一个 CF 规则,而且可能性的巨大数量使该方法不切实际。 再次感谢 Jeeped。因此,也许一个 CF 规则具有一系列 HEX 值并分配了一个接近的颜色匹配可能会起到作用,并且应该避免输入数百万个 CF 规则......或者也许将 VBA 规则翻译成 javascript

以上是关于根据单元格中的 HEX 值设置自动颜色背景?的主要内容,如果未能解决你的问题,请参考以下文章

怎么在excel中一个单元格中显示出自动计算的标记背景颜色的单元格数值的和

如何根据多个单元格中的值自动填充

AG-Grid:如何根据同一行中其他单元格中的值更改单元格的颜色

根据输入到单元格中的数字为单元格分配颜色和值,而无需点击运行按钮

使用 Pandas/ExcelWriter 为单元格中的文本部分着色

根据另一个单元格中的值自动填充 x 行的代码