我有一個電子表格符號和匹配的十六進制顏色。我想用單元格中的十六進制顏色填充單元格本身(或其旁邊的單元格)。我讀過一些關於「條件格式」的內容,我認爲這是實現它的方法。如何使用單元格內的十六進制顏色值突出顯示單元格?
我該如何達到我想要的結果?
我有一個電子表格符號和匹配的十六進制顏色。我想用單元格中的十六進制顏色填充單元格本身(或其旁邊的單元格)。我讀過一些關於「條件格式」的內容,我認爲這是實現它的方法。如何使用單元格內的十六進制顏色值突出顯示單元格?
我該如何達到我想要的結果?
無法通過條件格式化來實現所有顏色。
假設: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
,並在提示時輸入n您想要的值。
樣本輸出和公式等:
Excel的RGB()函數實際上創建了一個BGR值(我不認爲任何人可能知道爲什麼會說爲什麼雖然)這樣的Excel顯示半字節相反的順序。對於代碼列3,4,5是邏輯的,但BGR而不是傳統的RGB在我認爲可能看起來很奇怪的圖像。對於圖像中的F值,應用RIGHT()將十六進制顏色應用於C3值('RGB'三列的手部列)。
簡單多了:
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
這個功能可以改變,所以它可以直接用於condititonal格式? IfHexColour() - 因此它檢測到#作爲第一個元素,然後驗證6個字符,然後轉換爲RGB並將顏色設置爲活動單元格 –
我看不出內置的條件格式如何處理此問題。但是您可以使用VBA檢測以#開頭的字符串,並將其驗證爲有效的十六進制字符串,然後相應地爲單元格着色。 –
小編輯喬恩珀爾帖的答案。他的功能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
好多了!只需選擇範圍並執行宏。這真是一個很好的答案。非常感謝。 – Killer
爲此,用戶窗體可以與HEX2DEC功能進行說明。
Function Hex2Dec(n1 As String) As Long
Dim nl1 As Long
Dim nGVal As Long
Dim nSteper As Long
Dim nCount As Long
Dim x As Long
Dim nVal As Long
Dim Stepit As Long
Dim hVal As String
nl1 = Len(n1)
nGVal = 0
nSteper = 16
nCount = 1
For x = nl1 To 1 Step -1
hVal = UCase(Mid$(n1, x, 1))
Select Case hVal
Case "A"
nVal = 10
Case "B"
nVal = 11
Case "C"
nVal = 12
Case "D"
nVal = 13
Case "E"
nVal = 14
Case "F"
nVal = 15
Case Else
nVal = Val(hVal)
End Select
Stepit = (nSteper^(nCount - 1))
nGVal = nGVal + nVal * Stepit
nCount = nCount + 1
Next x
Hex2Dec = nGVal
End Function
...
UserForm1.TextBox1 = "RGB(" & Hex2Dec(UserForm1.txtHex1.Value) & "," & _
Hex2Dec(UserForm1.txtHex2.Value) & "," & Hex2Dec(UserForm1.txtHex3.Value) & ")"
例如,輸入值的文本框:#FF8800 - 結果:RGB(255,136,0)
我不認爲條件格式會爲你做它。我想你需要運行一個宏來讀取單元格值並設置Range(「A1:A6」)。Interior.Color = RGB(200,160,35)'。這意味着你還必須做數學轉換爲RGB或利用Excel的奇怪十六進制方法。 – Marc
呃知道,你如何接受3個答案中的1個? :) – gsamaras