У меня есть лист Excel, который имеет 3 столбца AB C столбцов, и я хочу, чтобы столбец D был цвета RGB (A, B, C) - PullRequest
0 голосов
/ 18 апреля 2020

Я использую Excel 2019/365 32 бит.

У меня есть лист с большим количеством строк и 3 столбцами. Столбец A - это красный компонент (целое число от 0 до 255). Столбец B - это зеленый компонент ( целое число от 0 до 255) Столбец C - это синий компонент (целое число от 0 до 255). Из формулы цвета RGB (A, B, C) я хочу, чтобы столбец D был цветом, который получился бы из RGB. (A, B, C) для этой строки Как назначить цвет для столбца D?

RBG (A, B, C) A, B, C может быть любым целым числом от 0 до 255, например, RGB (255,0,0) = красный цвет, желтый - RGB (255,255,0), зеленый = RGB (0,255,0), синий = RGB (0,0,255)

Условное форматирование невозможно, поскольку возможное сочетание цветов превышает 500 возможных цветов. Поэтому мне нужна функция или код VBA, чтобы заполнить D цветом, который соответствует RGB ().

Пример того, что я хочу, где цвета, которые вы видите, рассчитываются без условного форматирования

Ответы [ 3 ]

1 голос
/ 18 апреля 2020

Фактический ответ:

For x = StartRowNumber To EndRowNumber
    Cells(x, 4).Interior.Color = RGB(Cells(x, 1), Cells(x, 2), Cells(x, 3))
Next
1 голос
/ 18 апреля 2020

К сожалению, вы не раскрываете логическое назначение кода, который вы запрашиваете. Поэтому я изобрел один. Если это не соответствует вашим потребностям, вы можете изменить функциональность кода в соответствии с вашими требованиями. Сначала попробуйте.

Установите приведенный ниже код в модуль кода пустой таблицы. Важно, чтобы код был в этом конкретном модуле. В обозревателе проектов редактора VB он определяется по имени.

Private Sub Worksheet_Change(ByVal Target As Range)

    ' identify the columns containing R, B & G
    Const TriggerAddress As String = "A:C"

    Dim Rng As Range
    Dim Arr As Variant

    If Not Application.Intersect(Target, Range(TriggerAddress)) Is Nothing Then
        With Target
            ' ignore changes by Paste action
            If .Cells.CountLarge = 1 Then
                Set Rng = Range(TriggerAddress).Rows(.Row)
                ' require 3 numbers
                If Application.Count(Rng) = 3 Then
                    Arr = Rng.Value
                    Cells(.Row, Rng.Cells.Count + 1).Interior.Color = _
                    RGB(Arr(1, 1), Arr(1, 2), Arr(1, 3))
                End If
            End If
        End With
    End If
End Sub

Константа в верхней части процедуры определяет столбцы, в которых есть числа. Вы просили A: C, и это то, что есть сейчас, но это можно изменить в будущем. Обратите внимание, что вывод будет в горизонтально смежной ячейке, как вы и просили, но это тоже можно изменить.

Код будет реагировать, когда любая ячейка в TriggerColumns будет изменена. Если все 3 ячейки содержат числа, цвет заливки выходной ячейки будет изменен. Не то, чтобы 0 (ноль) было «числом» в этом контексте. Измените любое из 3 существующих чисел, и цвет снова будет сброшен.

0 голосов
/ 18 апреля 2020

Использование способа условного форматирования

Правило цвета ячейки отображается в столбце A, столбце B и столбце C:

  • Красный цвет: только столбец A
  • Зеленый цвет: только столбец B, столбец A + столбец B
  • синий цвет: только столбец C, столбец A + столбец C, столбец B + столбец C, столбец A + столбец B + Столбец C

Затем

В столбце D выберите D1:D7 >> Условное форматирование >> Новое правило >>

  1. Правило 1 формула: =LOOKUP(2,1/($A1:$C1<>""),ROW($A$1:$A$3))=1 >> Формат >> "Red" Цвет фона >> OK
  2. Формула правила 2: =LOOKUP(2,1/($A1:$C1<>""),ROW($A$1:$A$3))=2 >> Формат >> "Green" Цвет фона >> ОК
  3. Формула правила 3: =LOOKUP(2,1/($A1:$C1<>""),ROW($A$1:$A$3))=3 >> Формат >> "Blue" Цвет фона >> OK

  4. Fini sh

enter image description here

Результат цветной ячейки столбца D:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...