Cómo convertir códigos de color (RGB, HSL, HSV, Hex, Long, CMYK)

Índice
  1. Los diferentes formatos de códigos de colores de Excel
    1. RGB
    2. HSL
    3. Largo
    4. Maleficio
    5. CMYK
    6. VHS
  2. Funciones definidas por el usuario para conversión de color
    1. Convertir de RGB a hexadecimal
    2. Convertir de hexadecimal a RGB
    3. Convertir de RGB a largo
    4. Convertir de largo a RGB
    5. Convertir de largo a hexadecimal
    6. Convertir de hexadecimal a largo
    7. Convertir de RGB a HSL
    8. Convertir de HSL a RGB
    9. Convertir de RGB a CMYK
    10. Convertir de CMYK a RGB
    11. Convertir de RGB a HSV
    12. Convertir de HSV a RGB
  3. Complemento de conversión de color
  4. Conclusión

A menudo me encuentro realizando conversiones entre diferentes formatos de códigos de color; especialmente de hexadecimal a RGB y viceversa. En lugar de iniciar Google y buscar herramientas de conversión de color en línea, decidí escribir mis propias funciones definidas por el usuario en Excel; ahora puedo calcular el resultado dentro de una hoja de trabajo.

Las funciones de esta publicación incluyen las conversiones para RGB, hexadecimal, HSL, HSV, CMYK y formatos largos.

Usando estas funciones de conversión de color, creé un complemento que facilita aún más la conversión. Sigue leyendo para descubrir cómo puedes descargar el complemento de forma gratuita.

Tabla de contenido
  • Los diferentes formatos de códigos de colores de Excel
    • RGB
    • HSL
    • Largo
    • Maleficio
    • CMYK
    • VHS
  • Funciones definidas por el usuario para conversión de color
    • Convertir de RGB a hexadecimal
    • Convertir de hexadecimal a RGB
    • Convertir de RGB a largo
    • Convertir de largo a RGB
    • Convertir de largo a hexadecimal
    • Convertir de hexadecimal a largo
    • Convertir de RGB a HSL
    • Convertir de HSL a RGB
    • Convertir de RGB a CMYK
    • Convertir de CMYK a RGB
    • Convertir de RGB a HSV
    • Convertir de HSV a RGB
  • Complemento de conversión de color
  • Conclusión

Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.

Nombres de archivos:

  • 0006 Convertir códigos de color.xlsm : incluye todas las funciones personalizadas
  • ColorCodeConverter.xlam : complemento de Excel para conversión de color
  • Instrucciones de instalación del complemento.pdf - Instrucciones de desbloqueo de xlsm de instalación del complemento

Tener acceso

Los diferentes formatos de códigos de colores de Excel

Incluso en Excel, existen cuatro métodos diferentes para definir el color; RGB, hexadecimal, HSL y largo.

RGB

El código de color RGB (rojo, verde y azul) se utiliza dentro del cuadro de diálogo de color estándar.

Modo de color RGB

Cada uno de los colores rojo, verde y azul tiene 256 tonos diferentes, que al mezclarlos pueden crear 16.777.216 combinaciones de colores diferentes.

HSL

Dentro del cuadro de diálogo de color estándar hay otro formato de código; Usando el menú desplegable del modelo de color podemos cambiar a HSL. HSL usa Tono , Saturación y Luminancia para crear el color.

Modo de color HSL

HSL intenta definir los colores más cerca de la forma en que los humanos piensan sobre los colores.

  • Tono: es el grado en la rueda de colores de 0 a 360.0 es rojo, 120 es verde y 240 es azul.
  • Saturación: es un porcentaje de la cantidad de color incluido. 100 % es a todo color, 0 % es sin color (es decir, todo gris)
  • Luminancia (o luminosidad): es un porcentaje de gris. 0% es negro, 100% es blanco.

Es frustrante que Excel no maneje HSL de la manera estándar. En cambio, Excel mide todos los números donde 0 es el más bajo y 255 es el más grande. Pero es una peculiaridad que podemos manejar.

Largo

VBA utiliza el código de color largo al mostrar la propiedad de color de un elemento. La siguiente macro muestra el código largo para llenar la celda activa.

Sub ActiveCellColor()MsgBox "Long color code: "  ActiveCell.Interior.ColorEnd Sub

Seleccione una celda y ejecute la macro.

Código de color largo en un cuadro de mensaje

El código largo es un número del 0 al 16.777.215, donde cada número por separado representa un color. La relación entre RGB y largo se basa en un cálculo simple:

Largo = Azul x 256 x 256 + Verde x 256 + Rojo

Como ejemplo:

  • Donde Rojo: 33, Verde: 115 y Azul: 70
  • El resultado se calcula como 70 x 256 x 256 + 115 x 256 + 33 = 4.616.993

Long y RGB están relacionados; son simplemente diferentes formas de calcular el mismo número.

Maleficio

Los códigos de color hexadecimales (que es la abreviatura de hexadecimal) se encuentran en dos lugares en Excel.

  • Selector de color: Excel 2021 y Excel 365
  • VBA: todas las versiones de Excel

Modo de color HEX

Desde la introducción de códigos hexadecimales en el selector de color, ahora existe una conversión nativa entre códigos de color RGB, Hex y HSL.

Los códigos de color hexadecimales son similares al RGB, ya que también utilizan 256 tonos para cada color individual. La diferencia fundamental es que el sistema hexadecimal representa los números del 0 al 255 usando solo dos caracteres. Esto es posible porque el hexadecimal usa Base-16.

Generalmente usamos Base-10 en la vida cotidiana, lo que significa que tenemos 10 dígitos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) disponibles. Como ejemplo, el número 14 se crea mediante usando la fórmula (1 x base) + 4. La base es 10, por lo que el resultado se calcula como (1 x 10) + 4, que es igual a 14.

Para Base-16, hay 16 dígitos; sin embargo, como no tenemos suficientes caracteres numéricos, usamos A, B, C, D, E y F para representar los números del 10 al 15.

Como ejemplo, el número hexadecimal AB es igual a 171.

  • Una = 10
  • B = 11.
  • El cálculo es (A x base) + B=(10 x 16) + 11=171

En hexadecimal, el valor más bajo es cero y el valor más alto es F (que es igual a 15). Por lo tanto, hay 16 dígitos individuales posibles. Esto significa que a partir de dos dígitos podemos crear 256 sombras (16 x 16 = 256), que es lo mismo que RGB. Por lo tanto, hexadecimal también tiene las mismas 16.777.216 combinaciones que RGB y largo.

Los códigos hexadecimales se presentan en el mismo orden que RGB, por lo que si el código de color hexadecimal es # 467321 , los dos primeros caracteres representan el rojo, los dos del medio representan el verde y los dos últimos son el azul.

Usando el código hexadecimal #467321 como ejemplo, la conversión a RGB sería:

  • Rojo: el valor hexadecimal de 46 se calcula como (4 * 16) + 6 = 70
  • Verde: el valor hexadecimal de 73 se calcula como (7 * 16) + 3 = 115
  • Azul: el valor hexadecimal de 21 se calcula como (2 * 16) + 1 = 33

Los códigos hexadecimales se utilizan dentro de las propiedades de VBA para definir el color.

Código hexadecimal utilizado en VBA

El código de color en la captura de pantalla anterior es: H00467321. Sin embargo, existe una diferencia muy sutil al utilizar el código VBA; el código hexadecimal debe invertirse. Los dos primeros caracteres representan el azul, los dos del medio representan el verde y los dos últimos son azules.

Normalmente, el azul sería # 0000FF , pero para la propiedad VBA el código sería: H00FF0000

  • = Carácter inicial
  • H = código hexadecimal
  • 00 = Le dice a VBA que use un color personalizado
  • FF0000 = el código de color hexadecimal con el RGB invertido
  • = Carácter final

CMYK

Otro sistema de código de color común es CMYK. Se utiliza principalmente para imprimir, ya que determina la cantidad de tinta cian , magenta , amarilla y negra K que se utiliza en los puntos impresos superpuestos.

Si bien Excel no usa CMYK, es un método común, por lo que lo he incluido dentro del alcance de esta publicación.

VHS

Finalmente, para completar el espectro de sistemas de códigos de colores, está HSV. Es similar a HSL, pero utiliza Tono , Saturación y Valor como medidas. Esto no es sólo HSL con otro nombre. Si bien el tono es el mismo en ambos sistemas, la saturación y el valor se calculan como valores diferentes.

Excel no es compatible con HSV, pero se incluye a continuación porque es un método común.

Funciones definidas por el usuario para conversión de color

En la sección anterior, intenté explicar cómo cada método define los colores, pero convertir entre ellos es un asunto completamente diferente y mucho más difícil. Afortunadamente, podemos dejar que Excel haga el trabajo por nosotros. A continuación se muestran las UDF para convertir. entre los distintos métodos.

¡RECORDAR! – Para utilizar las funciones de VBA, el código debe estar incluido en un módulo de código VBA estándar.

RGB, hexadecimal y largo se basan en números enteros, por lo que deberían convertirse perfectamente entre sí. CMYK y HSL implican decimales y porcentajes y, por lo tanto, podrían crear pequeñas diferencias en sus conversiones.

Convertir de RGB a hexadecimal

La siguiente UDF calcula el valor hexadecimal en función de los códigos de color RGB.

Function GetHexFromRGB(Red As Integer, Green As Integer, Blue As Integer) As StringGetHexFromRGB = "#"  VBA.Right$("00"  VBA.Hex(Red), 2)  _    VBA.Right$("00"  VBA.Hex(Green), 2)  VBA.Right$("00"  VBA.Hex(Blue), 2)End Function

Cómo utilizar la función:

La función contiene 3 argumentos, valores entre 0 y 255 para cada valor individual de Rojo, Verde o Azul.

Hexadecimal de RGB

Convertir de hexadecimal a RGB

La UDF siguiente proporciona el valor Rojo, Verde o Azul según el color hexadecimal.

Function GetRGBFromHex(hexColor As String, RGB As String) As StringhexColor = VBA.Replace(hexColor, "#", "")hexColor = VBA.Right$("000000"  hexColor, 6)Select Case RGB    Case "B"        GetRGBFromHex = VBA.Val("H"  VBA.Mid(hexColor, 5, 2))    Case "G"        GetRGBFromHex = VBA.Val("H"  VBA.Mid(hexColor, 3, 2))    Case "R"        GetRGBFromHex = VBA.Val("H"  VBA.Mid(hexColor, 1, 2))End SelectEnd Function

Cómo utilizar la función:

La función contiene 2 argumentos;

  1. el código hexadecimal
  2. la letra R, G o B, para representar el color a devolver

RGB desde hexadecimal

Convertir de RGB a largo

Esta UDF proporciona el valor largo según los códigos de color RGB.

Function GetLongFromRGB(Red As Integer, Green As Integer, Blue As Integer) As LongGetLongFromRGB = RGB(Red, Green, Blue)End Function

Cómo utilizar la función:

La función contiene 3 argumentos, valores entre 0 y 255 para cada valor individual de Rojo, Verde o Azul.

RGB de largo

Convertir de largo a RGB

Para convertir de RGB al código de color largo, utilice la siguiente UDF.

Function GetRGBFromLong(longColor As Long, RGB As String) As IntegerSelect Case RGB    Case "R"        GetRGBFromLong = (longColor Mod 256)    Case "G"        GetRGBFromLong = (longColor  256) Mod 256    Case "B"        GetRGBFromLong = (longColor  65536) Mod 256End SelectEnd Function

Cómo utilizar la función:

La función contiene 2 argumentos;

  1. el código largo
  2. la letra R, G o B, según el color que queramos devolver.

Largo de RGB

Convertir de largo a hexadecimal

La siguiente UDF proporciona el código hexadecimal basado en el código de color largo.

Function GetHexFromLong(longColor As Long) As StringDim R As StringDim G As StringDim B As StringR = Format(Application.WorksheetFunction.Dec2Hex(longColor Mod 256), "00")G = Format(Application.WorksheetFunction.Dec2Hex((longColor  256) Mod 256), "00")B = Format(Application.WorksheetFunction.Dec2Hex((longColor  65536) Mod 256), "00")GetHexFromLong = "#"  R  G  BEnd Function

Cómo utilizar la función:

La función tiene un solo argumento, que es el código de color largo.

Maleficio de largo

Convertir de hexadecimal a largo

La UDF siguiente convierte el código hexadecimal en un código de color largo.

Function GetLongFromHex(hexColor As String) As LongDim R As StringDim G As StringDim B As StringhexColor = VBA.Replace(hexColor, "#", "")hexColor = VBA.Right$("000000"  hexColor, 6)R = Left(hexColor, 2)G = Mid(hexColor, 3, 2)B = Right(hexColor, 2)GetLongFromHex = Application.WorksheetFunction.Hex2Dec(B  G  R)End Function

Cómo utilizar la función:

La función tiene un solo argumento, que es el código hexadecimal.

Largo desde Hex

Convertir de RGB a HSL

La UDF a continuación devolverá el grado de Tono, % de Saturación o % de Luminancia según los códigos de color RGB.

Function GetHSLFromRGB(Red As Integer, Green As Integer, Blue As Integer, _    HSL As String)Dim RedPct As DoubleDim GreenPct As DoubleDim BluePct As DoubleDim MinRGB As DoubleDim MaxRGB As DoubleDim H As DoubleDim S As DoubleDim L As DoubleRedPct = Red / 255GreenPct = Green / 255BluePct = Blue / 255MinRGB = Application.WorksheetFunction.Min(RedPct, GreenPct, BluePct)MaxRGB = Application.WorksheetFunction.Max(RedPct, GreenPct, BluePct)L = (MinRGB + MaxRGB) / 2If MinRGB = MaxRGB Then    S = 0ElseIf L  0.5 Then    S = (MaxRGB - MinRGB) / (MaxRGB + MinRGB)Else    S = (MaxRGB - MinRGB) / (2 - MaxRGB - MinRGB)End IfIf S = 0 Then    H = 0ElseIf RedPct = Application.WorksheetFunction.Max(GreenPct, BluePct) Then    H = (GreenPct - BluePct) / (MaxRGB - MinRGB)ElseIf GreenPct = Application.WorksheetFunction.Max(RedPct, BluePct) Then    H = 2 + (BluePct - RedPct) / (MaxRGB - MinRGB)Else    H = 4 + (RedPct - GreenPct) / (MaxRGB - MinRGB)End IfH = H * 60If H  0 Then H = H + 360Select Case HSL    Case "H"        GetHSLFromRGB = H    Case "S"        GetHSLFromRGB = S    Case "L"        GetHSLFromRGB = LEnd SelectEnd Function

Cómo utilizar la función:

La función contiene 4 argumentos. Los valores R, G y B, luego la letra H, S o L, según el valor que devolverá la función.

HSL de RGB

El cálculo para convertir a HSL se basa en el cálculo de aquí: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl/

Convertir de HSL a RGB

La siguiente UDF calcula los valores RGB en función del grado de tono, % de saturación y % de luminancia.

Function GetRGBFromHSL(Hue As Double, Saturation As Double, Luminance As Double, RGB As String)Dim R As DoubleDim G As DoubleDim B As DoubleDim temp1 As DoubleDim temp2 As DoubleDim tempR As DoubleDim tempG As DoubleDim tempB As DoubleIf Saturation = 0 Then    R = Luminance * 255    G = Luminance * 255    B = Luminance * 255GoTo ReturnValueEnd IfIf Luminance  0.5 Then    temp1 = Luminance * (1 + Saturation)Else    temp1 = Luminance + Saturation - Luminance * SaturationEnd Iftemp2 = 2 * Luminance - temp1Hue = Hue / 360tempR = Hue + 0.333tempG = HuetempB = Hue - 0.333If tempR  0 Then tempR = tempR + 1If tempR  1 Then tempR = tempR - 1If tempG  0 Then tempG = tempG + 1If tempG  1 Then tempG = tempG - 1If tempB  0 Then tempB = tempB + 1If tempB  1 Then tempB = tempB - 1If 6 * tempR  1 Then    R = temp2 + (temp1 - temp2) * 6 * tempRElse    If 2 * tempR  1 Then        R = temp1    Else        If 3 * tempR  2 Then            R = temp2 + (temp1 - temp2) * (0.666 - tempR) * 6        Else            R = temp2        End If    End IfEnd IfIf 6 * tempG  1 Then    G = temp2 + (temp1 - temp2) * 6 * tempGElse    If 2 * tempG  1 Then        G = temp1    Else        If 3 * tempG  2 Then            G = temp2 + (temp1 - temp2) * (0.666 - tempG) * 6        Else            G = temp2        End If    End IfEnd IfIf 6 * tempB  1 Then    B = temp2 + (temp1 - temp2) * 6 * tempBElse    If 2 * tempB  1 Then        B = temp1    Else        If 3 * tempB  2 Then            B = temp2 + (temp1 - temp2) * (0.666 - tempB) * 6        Else            B = temp2        End If    End IfEnd IfR = R * 255G = G * 255B = B * 255ReturnValue:Select Case RGB    Case "R"        GetRGBFromHSL = Round(R, 0)    Case "G"        GetRGBFromHSL = Round(G, 0)    Case "B"        GetRGBFromHSL = Round(B, 0)End SelectEnd Function

Cómo utilizar la función:

La función contiene 4 argumentos: el grado de tono, el porcentaje de saturación y el porcentaje de luminancia más la letra R, G o B dependiendo del valor que se devolverá.

RGB de HSL

El cálculo para convertir de HSL se basa en el cálculo de aquí: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl/

Convertir de RGB a CMYK

La siguiente UDF proporciona el valor % para cian, magenta, amarillo o negro según los códigos de color RGB.

Function GetCMYKFromRGB(Red As Integer, Green As Integer, Blue As Integer, CMYK As String) As DoubleDim K As DoubleDim RedPct As DoubleDim GreenPct As DoubleDim BluePct As DoubleDim MaxRGB As DoubleRedPct = Red / 255GreenPct = Green / 255BluePct = Blue / 255MaxRGB = Application.WorksheetFunction.Max(RedPct, GreenPct, BluePct)If MaxRGB = 0 And CMYK  "K" Then    GetCMYKFromRGB = 0    Exit FunctionEnd IfK = 1 - MaxRGBSelect Case CMYK    Case "C"        GetCMYKFromRGB = (1 - RedPct - K) / (1 - K)    Case "M"        GetCMYKFromRGB = (1 - GreenPct - K) / (1 - K)    Case "Y"        GetCMYKFromRGB = (1 - BluePct - K) / (1 - K)    Case "K"        GetCMYKFromRGB = KEnd SelectEnd Function

Cómo utilizar la función:

La función requiere 4 argumentos. Los valores R, G y B, junto con la letra C, M, Y o K, según el valor a devolver.

CMYK desde RGB

El cálculo para convertir a CMYK se basa en el cálculo realizado aquí: https://www.easycalculation.com/colorconverter/cmyk-rgb-color-convertor.php

Convertir de CMYK a RGB

Para obtener los porcentajes C, M, Y o K de RGB utilice la UDF a continuación.

Function GetRGBFromCMYK(C As Double, M As Double, Y As Double, K As Double, RGB As String) As IntegerSelect Case RGB    Case "R"        GetRGBFromCMYK = 255 * (1 - K) * (1 - C)    Case "G"        GetRGBFromCMYK = 255 * (1 - K) * (1 - M)    Case "B"        GetRGBFromCMYK = 255 * (1 - K) * (1 - Y)End SelectEnd Function

Cómo utilizar la función:

La función requiere 5 argumentos. Los porcentajes de Cian, Magenta, Amarillo y Negro, más la letra R, G o B, según el valor a devolver.

RGB desde CMYK

El cálculo para convertir desde CMYK se basa en el cálculo de aquí: https://stackoverflow.com/questions/10690125/coloring-cells-in-excel-with-cmyk-cell-values

Convertir de RGB a HSV

La UDF a continuación devolverá el grado de Tono, % de Saturación o % de Valor según los códigos de color RGB.

Function GetHSVFromRGB(Red As Integer, Green As Integer, Blue As Integer, HSV As String)Dim RedPct As DoubleDim GreenPct As DoubleDim BluePct As DoubleDim MinRGB As DoubleDim MaxRGB As DoubleDim H As DoubleDim S As DoubleDim V As DoubleRedPct = Red / 255GreenPct = Green / 255BluePct = Blue / 255MinRGB = Application.WorksheetFunction.Min(RedPct, GreenPct, BluePct)MaxRGB = Application.WorksheetFunction.Max(RedPct, GreenPct, BluePct)V = MaxRGBIf MaxRGB = 0 Then    S = 0Else    S = (MaxRGB - MinRGB) / MaxRGBEnd IfIf S = 0 Then    H = 0ElseIf RedPct = Application.WorksheetFunction.Max(GreenPct, BluePct) Then    H = (GreenPct - BluePct) / (MaxRGB - MinRGB)ElseIf GreenPct = Application.WorksheetFunction.Max(RedPct, BluePct) Then    H = 2 + (BluePct - RedPct) / (MaxRGB - MinRGB)Else    H = 4 + (RedPct - GreenPct) / (MaxRGB - MinRGB)End IfH = H * 60If H  0 Then H = H + 360Select Case HSV    Case "H"        GetHSVFromRGB = H        Case "S"        GetHSVFromRGB = S        Case "V"        GetHSVFromRGB = VEnd SelectEnd Function

El cálculo para convertir a HSV desde RGB se basa en el cálculo de aquí: https://www.calculatorology.com/hsv-to-rgb-conversion/

Convertir de HSV a RGB

La siguiente UDF calcula los valores RGB en función del grado de tono, % de saturación y % de valor del método HSV.

Function GetRGBFromHSV(Hue As Double, Saturation As Double, Value As Double, RGB As String)Dim R As DoubleDim G As DoubleDim B As DoubleDim C As DoubleDim X As DoubleDim m As DoubleC = Saturation * ValueX = C * (1 - Abs((CDec(Hue / 60) - 2 * Int((Hue / 60) / 2)) - 1))m = Value - CIf Hue = 0 And Hue  60 Then    R = C    G = X    B = 0ElseIf Hue = 60 And Hue  120 Then    R = X    G = C    B = 0ElseIf Hue = 120 And Hue  180 Then    R = 0    G = C    B = XElseIf Hue = 180 And Hue  240 Then    R = 0    G = X    B = CElseIf Hue = 240 And Hue  300 Then    R = X    G = 0    B = CElse    R = C    G = 0    B = XEnd IfR = (R + m) * 255G = (G + m) * 255B = (B + m) * 255Select Case RGB    Case "R"        GetRGBFromHSV = Round(R, 0)        Case "G"        GetRGBFromHSV = Round(G, 0)        Case "B"        GetRGBFromHSV = Round(B, 0)End SelectEnd Function

El cálculo para convertir a HSV desde RGB se basa en el cálculo de aquí: https://www.codespeedy.com/hsv-to-rgb-in-cpp/

Complemento de conversión de color

Usando estas funciones de conversión, he creado un complemento de Excel que cambiará rápidamente entre los diferentes códigos de color.

El complemento se incluye dentro de las descargas en la parte superior de la publicación. Para instalar el complemento, siga las instrucciones en PDF incluidas en la descarga o siga las instrucciones de esta publicación .

Una vez instalado, el menú EOTG incluirá un ícono llamado Convertidor en el grupo Códigos de color.

Cinta EOTG con complemento convertidor de color

Haga clic en el botón para abrir la herramienta. Al ingresar valores en cualquiera de los cuadros, los otros cuadros mostrarán automáticamente los códigos convertidos.

Formulario de usuario del complemento Convertidor de código de color

Conclusión

Espero que esta publicación le proporcione todas las conversiones de color que necesita. Si desea convertir entre dos métodos que no he cubierto anteriormente (por ejemplo, no se ha incluido hexadecimal a HSL), convierta del código fuente a RGB, luego de RGB al modo objetivo.

Artículos Relacionados:

  • Llamar y usar el selector de color con VBA
  • 5 reglas para una paleta de colores de tablero
  • Matrices dinámicas y funciones definidas por el usuario (UDF) de VBA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...