如何使用单元格中的十六进制颜色值突出显示单元格?

时间:2012-05-04 20:00:33

标签: excel vba excel-vba excel-2010 conditional-formatting

我有一个符号和匹配的十六进制颜色的电子表格。我想用单元格内的十六进制颜色填充单元格本身(或旁边的单元格)。我已经阅读了一些关于“条件格式化”的内容,我认为这是实现它的方法。

我如何实现我想要的结果?

6 个答案:

答案 0 :(得分:66)

使用所有颜色的条件格式无法实现。

假设:Row1包含数据标签,数据集没有间隙,HEX颜色用于填充而不是字体,您已将HEX颜色值(数字,而不是公式)解析为列C:E(R,G ,B)并且您不需要经常这样做,那么ColourCells宏可能适合:

Sub ColourCells()
Dim HowMany As Integer
On Error Resume Next
Application.DisplayAlerts = False
HowMany = Application.InputBox _
(Prompt:="Enter last row number.", Title:="To apply to how many rows?", Type:=1)
On Error GoTo 0
Application.DisplayAlerts = True
If HowMany = 0 Then
Exit Sub
Else
   Dim i As Integer
   For i = 2 To HowMany
      Cells(i, 3).Interior.Color = RGB(Cells(i, 3), Cells(i, 4), Cells(i, 5))
   Next i
End If
End Sub

并在提示时输入您想要的值。

示例输出和公式等:

SO11466034

Excel的RGB()函数实际上会创建一个BGR值(我不认为任何人可能知道为什么会说为什么)所以Excel以相反的顺序显示半字节。对于代码Columns3,4,5是合乎逻辑的但是BGR而不是我认为可能看起来奇怪的图像中的传统RGB。对于图像中的F,C3值('RGB'三个的 LEFT 指针列)是通过将 RIGHT()应用于十六进制颜色而得到的。

答案 1 :(得分:19)

对Jon Peltier的回答进行小修改。他的函数ALMOST有效,但它渲染的颜色不正确,因为Excel会渲染为BGR而不是RGB。这是校正后的函数,它将十六进制值对交换为“正确”顺序:

Sub ColorCellsByHex()
  Dim rSelection As Range, rCell As Range, tHex As String

  If TypeName(Selection) = "Range" Then
  Set rSelection = Selection
    For Each rCell In rSelection
      tHex = Mid(rCell.Text, 6, 2) & Mid(rCell.Text, 4, 2) & Mid(rCell.Text, 2, 2)
      rCell.Interior.Color = WorksheetFunction.Hex2Dec(tHex)
    Next
  End If
End Sub

答案 2 :(得分:5)

更简单:

ActiveCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 2))

中间剥离前导“#”,Hex2Dec将十六进制数转换为VBA可以使用的十进制值。

因此,选择要处理的范围,然后运行:

Sub ColorCellsByHexInCells()
  Dim rSelection As Range, rCell As Range

  If TypeName(Selection) = "Range" Then
  Set rSelection = Selection
    For Each rCell In rSelection
      rCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(rCell.Text, 2))
    Next
  End If
End Sub

答案 3 :(得分:1)

无需反复刺穿VBA /工作表障碍进行转换。此精简版本可正确获取字节顺序:

Sub ColorCellsByHex()
    Dim r
    If TypeName(Selection) <> "Range" Then Exit Sub
    For Each r In Selection
        r.Interior.Color = Abs(("&H" & Mid(r, 6, 2) & Mid(r, 4, 2) & Mid(r, 2, 2)))
    Next
End Sub

答案 4 :(得分:0)

为此,可以使用Hex2Dec函数创建用户表单。

$query = $db->prepare("INSERT INTO items 
    (id, gameid, assetid, name, icon, price, owner) 
    VALUES (:id, :gameid, :assetid, :name, :icon, :price, :owner)"
);

例如;输入的文本框值:#FF8800 - 结果:RGB(255,136,0)

答案 5 :(得分:0)

这是另一个选项-假设单元格中的值以“#”开头且为7个字符,则当您选择该单元格时,它将更新单元格颜色。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If (Left(ActiveCell.Text, 1) = "#" And Len(ActiveCell.Text) = 7) Then
    ActiveCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 2))
End If

End Sub