Подтвердить что ты не робот

Как выделить ячейку с использованием значения цвета гексагональной ячейки?

У меня есть таблица символов и соответствующие шестнадцатеричные цвета. Я хочу заполнить сам элемент (или тот, который рядом) с шестнадцатеричным цветом внутри ячейки. Я немного читал об "условном форматировании", и я думаю, что это способ сделать это.

Как я могу достичь результата, который хотел бы?

4b9b3361

Ответ 1

Не может быть достигнуто с помощью Условного форматирования для всех цветов.

Предполагая: 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 показывает nibbles в обратном порядке. Для кода Columns3,4,5 был логичным, но BGR, а не обычный RGB в изображении, который, как я думал, выглядел бы странным. Для F в изображении значение C3 (столбец LEFT "RGB" три) происходит от применения RIGHT() к цвету Hex.

Ответ 2

Незначительное редактирование ответа Джона Пельтье. Его функция ALMOST работает, но цвета, которые он отображает, неверны из-за того, что Excel будет отображаться как BGR, а не RGB. Вот исправленная функция, которая меняет пары значений Hex в "правильный" порядок:

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

Ответ 3

Гораздо проще:

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

Ответ 4

Для этого пользовательская форма может быть выполнена с помощью функции 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)