2012-05-04 80 views
13

我有一個電子表格符號和匹配的十六進制顏色。我想用單元格中的十六進制顏色填充單元格本身(或其旁邊的單元格)。我讀過一些關於「條件格式」的內容,我認爲這是實現它的方法。如何使用單元格內的十六進制顏色值突出顯示單元格?

我該如何達到我想要的結果?

+5

我不認爲條件格式會爲你做它。我想你需要運行一個宏來讀取單元格值並設置Range(「A1:A6」)。Interior.Color = RGB(200,160,35)'。這意味着你還必須做數學轉換爲RGB或利用Excel的奇怪十六進制方法。 – Marc

+0

呃知道,你如何接受3個答案中的1個? :) – gsamaras

回答

57

無法通過條件格式化來實現所有顏色。

假設: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您想要的值。

樣本輸出和公式等:

SO11466034

Excel的RGB()函數實際上創建了一個BGR值(我不認爲任何人可能知道爲什麼會說爲什麼雖然)這樣的Excel顯示半字節相反的順序。對於代碼列3,4,5是邏輯的,但BGR而不是傳統的RGB在我認爲可能看起來很奇怪的圖像。對於圖像中的F值,應用RIGHT()將十六進制顏色應用於C3值('RGB'三列的手部列)。

+2

+1很好地完成。 – brettdj

+0

可以看到這可能用於以更吸引人的方式說明溫度數據,然後只是表格數據。 1 – ryyker

+1

@ryyker對於熱圖(對於溫度或其他)[@JonPeltier](http://peltiertech.com/WordPress/heat-map-excel-conditional-formatting/)可以是感興趣的。 – pnuts

4

簡單多了:

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 
+0

這個功能可以改變,所以它可以直接用於condititonal格式? IfHexColour() - 因此它檢測到#作爲第一個元素,然後驗證6個字符,然後轉換爲RGB並將顏色設置爲活動單元格 –

+0

我看不出內置的條件格式如何處理此問題。但是您可以使用VBA檢測以#開頭的字符串,並將其驗證爲有效的十六進制字符串,然後相應地爲單元格着色。 –

10

小編輯喬恩珀爾帖的答案。他的功能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 
+0

好多了!只需選擇範圍並執行宏。這真是一個很好的答案。非常感謝。 – Killer

0

爲此,用戶窗體可以與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)

相關問題