我有一个符号和匹配的十六进制颜色的电子表格。我想用单元格内的十六进制颜色填充单元格本身(或旁边的单元格)。我已经阅读了一些关于“条件格式化”的内容,我认为这是实现它的方法。
我如何实现我想要的结果?
答案 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
并在提示时输入您想要的值。
示例输出和公式等:
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