Басселу нужна формула, которая может преобразовывать значения цвета HSL (значения оттенка, насыщенности и яркости) в значения цвета RGB (значения красного, синего и зеленого). Он задается вопросом, может ли кто-нибудь указать ему либо на формулу рабочего листа, которая сделает это, либо на способ сделать это в макросе.

Преобразование значений HSL в RGB — нетривиальная задача. Для тех, кто интересуется математикой, стоящей за этим, вы можете проверить статью в Википедии по этой теме.

Если вам нужно выполнять преобразование нечасто, самый простой способ — выполнить следующие действия:

  1. Откройте вкладку «Главная» на ленте.

  2. Щелкните стрелку вниз справа от инструмента «Цвет заливки» в группе «Шрифт». Excel отображает небольшую палитру цветов и некоторые другие параметры.

  3. Выберите больше цветов. Excel отображает диалоговое окно «Цвета».

  4. Убедитесь, что отображается вкладка Custom.

  5. В раскрывающемся списке «Цветовая модель» выберите HSL. (См. Рис. 1.)

  6. Внизу диалогового окна вы можете увидеть отдельные значения для Hue, Sat и Lum. Измените эти значения на все, что захотите.

  7. В раскрывающемся списке Цветовая модель выберите RGB. Значения, отображаемые в нижней части диалогового окна, являются значениями HSL (введенными на шаге 6)

преобразован в RGB.

  1. По завершении нажмите Отмена.

Этот подход предполагает, что каждое из ваших значений HSL может быть выражено в диапазоне от 0 до 255. Если, однако, ваши значения HSL представляют собой угол (для оттенка) или процент (для насыщенности и яркости), тогда вам понадобится чтобы преобразовать их вручную перед вводом на шаге 6. Вы можете преобразовать значение угла, умножив угол на 255 и затем разделив на 360.

Проценты можно преобразовать, умножив их на 2,55.

Если вам нужно получать значения чаще, тогда поможет создание вашей собственной пользовательской функции для преобразования. В следующем примере принимаются три параметра (Hue, Saturation и Luminance) и возвращается строка, содержащая десятичные значения RGB, разделенные запятыми.

Function HSLtoRGB(Hue As Integer, Saturation As Integer, _   Luminance As Integer) As String     Dim r As Integer     Dim g As Integer     Dim b As Integer     Dim C As Double     Dim X As Double     Dim m As Double     Dim rfrac As Double     Dim gfrac As Double     Dim bfrac As Double     Dim hangle As Double     Dim hfrac As Double     Dim sfrac As Double     Dim lfrac As Double

If (Saturation = 0) Then         r = 255         g = 255         b = 255     Else         lfrac = Luminance / 255         hangle = Hue / 255  360         sfrac = Saturation / 255         C = (1 - Abs(2  lfrac - 1))  sfrac         hfrac = hangle / 60         hfrac = hfrac - Int(hfrac / 2)  2 'fmod calc         X = (1 - Abs(hfrac - 1))  C         m = lfrac - C / 2         Select Case hangle             Case Is < 60                 rfrac = C                 gfrac = X                 bfrac = 0             Case Is < 120                 rfrac = X                 gfrac = C                 bfrac = 0             Case Is < 180                 rfrac = 0                 gfrac = C                 bfrac = X             Case Is < 240                 rfrac = 0                 gfrac = X                 bfrac = C             Case Is < 300                 rfrac = X                 gfrac = 0                 bfrac = C             Case Else                 rfrac = C                 gfrac = 0                 bfrac = X         End Select         r = Round((rfrac + m)  255)

g = Round((gfrac + m) * 255)

b = Round((bfrac + m) * 255)

End If     HSLtoRGB = Str(r) & "," & Str(g) & "," & Str(b)

End Function

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (13535) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.