How to highlight a cell using the hex color value within the cell? How to highlight a cell using the hex color value within the cell? vba vba

How to highlight a cell using the hex color value within the cell?


Can't be achieved with Conditional Formatting for all colours.

Assuming: Row1 contains Data Labels, data set does not have gaps, the HEX colour is for the fill not the font, you have parsed the HEX colour values (numbers, not formulae) into Columns C:E (R,G,B) and that you do not require to do this often, then the ColourCells macro might suit:

Sub ColourCells()Dim HowMany As IntegerOn Error Resume NextApplication.DisplayAlerts = FalseHowMany = Application.InputBox _(Prompt:="Enter last row number.", Title:="To apply to how many rows?", Type:=1)On Error GoTo 0Application.DisplayAlerts = TrueIf HowMany = 0 ThenExit SubElse   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 iEnd IfEnd Sub

and enter the value you want for n when prompted.

Sample output and formulae etc:

SO11466034

Excel's RGB() function actually creates a BGR value (I don't think anybody that might know why is saying why though) so Excel shows nibbles in reverse order. For the code Columns3,4,5 was logical but BGR rather than the conventional RGB in the image I thought might look odd. For F in the image the C3 value (the LEFT hand column of the 'RGB' three) is derived from applying RIGHT() to the Hex colour.


Minor edit to Jon Peltier's answer. His function ALMOST works, but the colors it renders are incorrect due to the fact the Excel will render as BGR rather than RGB. Here is the corrected function, which swaps the pairs of Hex values into the 'correct' order:

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 IfEnd Sub


Much simpler:

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

Mid strips off the leading "#", Hex2Dec turns the hex number into a decimal value that VBA can use.

So select the range to process, and run this:

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 IfEnd Sub