Excel ordenar por color con VBA - Consejos de Excel

Tabla de contenido

Anteriormente, en Podcast 2093, mostré una clasificación de VBA simple que funciona si no está ordenando por color. Hoy, Neeta solicita al VBA que ordene los datos de Excel por color.

Lo más complicado de ordenar por VBA es averiguar qué códigos de color RGB está utilizando. En el 99% de los casos, no eligió un color ingresando valores RGB. Elegiste un color usando este menú desplegable en Excel.

La mayoría de las personas eligen el color de relleno o fuente usando este menú desplegable

Y, si bien puede usar Relleno, Más colores, Personalizado para saber que el color seleccionado es RGB (112, 48, 160), eso es una molestia si tiene muchos colores.

Los códigos RGB están ocultos en este diálogo

Entonces, prefiero encender la grabadora de macros y dejar que la grabadora de macros descubra el código. El código generado por la grabadora de macros nunca es perfecto. Aquí está el video que muestra cómo usar la grabadora de macros al ordenar por color.

Transcripción del video

Aprenda Excel de Podcast, Episodio 2186: VBA Ordenar por color.

Oye, bienvenido de nuevo al netcast, soy Bill Jelen. Pregunta de hoy, enviada en YouTube. Tenía un video sobre cómo ordenar con VBA, y querían ordenar por color con VBA, que es mucho más complicado. Le dije: "¿Por qué no enciende la grabadora de macros y mira qué pasa?" Y, desafortunadamente, la grabadora de macros, ya sabes, nos acerca, pero no nos lleva hasta allí.

Así que Ver, Macros, Grabar macro, "HowToSortByColor", Almacenar macro en este libro, perfecto. Haga clic en Aceptar. Muy bien, ahora que la grabadora de macros se está ejecutando, vamos a ir aquí a la pestaña Datos y vamos a decir Ordenar. Vamos a usar un cuadro de diálogo Ordenar y lo vamos a construir, ¿de acuerdo? Entonces, vamos a decir que queremos agregar un nivel, Ordenar por cereza, pero no Ordenar por valores de celda; vamos a Ordenar por color de celda - El color de celda es el color de relleno allí - y queremos poner rojo en la parte superior y luego copiar ese nivel, y poner amarillo en segundo lugar; y luego agregaremos un nuevo nivel - iremos a la columna D, la columna de la fecha - Ordenar por Color de celda, primero rojo, copiar ese nivel, amarillo, y luego aquí; y luego, aquí en Elderberry, columna E, hay algunas fuentes azules que no quiero ver cómo se veían,así que lo agregaremos como Ordenar por color de fuente con azul en la parte superior; y luego, si todos estos son un empate para ningún color en absoluto, agregaremos un nivel final solo en la columna A: Valores de celda, de mayor a menor; y haga clic en Aceptar.

Bien, ahora, un par de cosas, no se salte el siguiente paso, su archivo, ahora mismo, le garantizo que está almacenado como xlsx. Este es un buen momento para hacer Archivo, Guardar como y guardarlo como xlsm o xlsb. Si no lo hace, todo su trabajo hasta este punto se perderá cuando guarde este archivo. Eliminarán las macros de todo lo almacenado en xlsx. ¿Bien?

Así que dejamos de grabar allí, y luego queremos ir a ver nuestras macros. Por lo tanto, puede hacer esto con Ver, Macros-- Ver, Macros-- y encontrar la macro que acabamos de grabar-- HowToSortByColor-- y hacer clic en Editar. Muy bien, aquí está nuestra macro, y mientras miro esto, el problema que tenemos es que hoy tenemos 25 filas más un encabezado. Entonces baja a la fila 26. Y han codificado de forma rígida que siempre mirarán hacia abajo a las filas 26.

Pero mientras pienso en esto, especialmente en comparación con el antiguo VBA para la clasificación, no tenemos que especificar todo el rango, solo una celda en la columna. Entonces, en cualquier lugar donde tengan la columna C26, la reduciré para decir: "Oye, no, mira la primera celda de esa columna". Entonces E2, y luego, aquí, A2. Entonces, en mi caso, tenía 1, 2, 3, 4, 5, 6, niveles de clasificación, 6 cosas para cambiar.

Y luego esta es la parte en la que la grabadora de macros se pone realmente mala, es que solo van a clasificar en las filas 26 todo el tiempo. Entonces voy a cambiar esto. Voy a decir: "Mire, comience en el rango A21 y extiéndalo a .CurrentRegion". Echemos un vistazo a Excel y veamos qué hace. Entonces, si solo eligiera una celda, A1 o cualquier cosa, y presiono Ctrl + *, selecciona la Región actual. Bien, hagámoslo. Aquí, desde el medio, Ctrl + *, y lo que hace, es que se extiende en todas las direcciones hasta que llega al borde de la hoja de cálculo, en la parte superior de la hoja de cálculo o en el borde derecho de los datos o en el borde inferior de los datos. . Entonces, al decir A1 .CurrentRegion, es como ir a A1 y presionar Ctrl + *. ¿Bien? Entonces, aquí tienes que cambiar esa cosa. Ahora todo lo demás en la macro está bien; eso'Todo va a funcionar. Obtuvieron SortOnCellColor y SortOnFontColor y xlSortOn. No tengo que preocuparme por nada de eso; todo lo que tengo que hacer es mirar aquí y ver que codificaron la región que iban a usar para el rango, codificaron hasta dónde llegaron, y no es necesario codificarlas. Y con ese simple paso, cambiando esos seis elementos y el séptimo, tenemos algo que debería funcionar.

Ahora, hagamos la prueba. Regresemos aquí a Excel y agregaremos algunas filas nuevas en la parte inferior. Solo pondré 11 allí, y agregaremos un par de rojos: un rojo, un amarillo y luego aquí un azul. Bien. Entonces, si ejecutamos este código, ejecutamos este código, así que hago clic aquí, y hago clic en el botón Ejecutar, y luego regresamos, deberíamos ver que el 11 se convirtió en el elemento superior en rojo, apareció allí en el amarillos, y aparece en los azules, por lo que todo funciona perfectamente. ¿Por qué subió a la cima? Porque sucedió que el último tipo es la Columna A y, por lo tanto, cuando hay un empate, mira a la columna A como desempate. Entonces ese código está funcionando.

Para aprender a escribir VBA, yo, junto con Tracy Syrstad, he escrito una serie de libros, Excel VBA y MACROS. Ahora ha habido una edición para 2003, 2007, 2010, 2013 y 2016; pronto en 2019. Muy bien, busque la versión que coincida con su versión de Excel y esto lo ayudará a mejorar la curva de aprendizaje.

Resumen: El episodio de hoy es Cómo usar VBA para ordenar por color. La forma más fácil de hacer esto, especialmente porque no sabe qué códigos RGB se usaron para cada uno de los colores, simplemente eligió rojo, no sabe cuál es el código RGB y no quiere ir a buscar Encienda la grabadora de macros usando Ver, Macros, Grabar nueva macro. Una vez que haya terminado de ordenar, haga clic en Detener grabación, está en la esquina inferior izquierda, Alt + F8 para ver una lista de macros, o Ver, Macros, Ver macro, la pestaña Ver, Macros y luego Ver macros, eso es confuso. PSeleccione su macro y haga clic en Editar, y cada vez que vea C2 en algunos números de rango, simplemente cámbielo para que apunte a la fila 2. Y luego, donde especifiquen el rango para ordenar, Rango ("A1"), CurrentRegion, se expandirá. Bien.

Bueno, oye, quiero agradecerles por pasar, nos vemos la próxima vez para otro netcast de.

En el video, configuré una clasificación de seis niveles. El cuadro de diálogo final se muestra aquí:

Ordenar por rojo, amarillo en C, rojo, amarillo en d, azul en e, números en a

El día en que grabé la macro, tenía 23 filas de datos más un encabezado. Había siete lugares en la macro que codificaban el número de filas. Estos deben ajustarse.

Para cada nivel de clasificación, hay un código como este:

ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2:C24"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0) 

Es una tontería que la grabadora de macros especifique C2: C24. Solo tiene que especificar una celda en la columna, así que cambie la primera línea de arriba a:

ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _

Realice un cambio similar para cada uno de los niveles de clasificación.

Cerca del final de la macro grabada, tiene el código grabado para realizar la clasificación. Empieza así:

With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1:E24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With

En lugar de ordenar solo A1: E24, cambie el código para comenzar en A1 y extender a la región actual. (La región actual es lo que obtiene si presiona Ctrl + * desde una celda).

.SetRange Range("A1").CurrentRegion

El código final que se muestra en el video es:

Sub HowToSortByColor() HowToSortByColor Macro ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear ' Sort column C by Red ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0) ' Sort Column C by Yellow ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("C2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 255, 0) ' Sort column D by Red ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("D2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 0, 0) ' Sort column D by Yellow ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("D2"), _ xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 255, 0) ' Sort column E by blue font ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add(Range("E2"), _ xlSortOnFontColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(0, 176, 240) ' Sort Column A by Values descending ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("A2"), _ SortOn:=xlSortOnValues, _ Order:=xlDescending, _ DataOption:=xlSortNormal ' Perform the Sort With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("A1").CurrentRegion .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

Nota

Es probable que su libro de trabajo esté guardado con una extensión XLSX. Haga un Guardar como para cambiar a una extensión XLSM o XLSB. Se eliminan todas las macros guardadas en XLSX.

Pensamiento del día de Excel

Les he pedido a mis amigos de Excel Master sus consejos sobre Excel. Pensamiento de hoy para reflexionar:

"Una manzana al día mantiene alejado el VBA".

Tom Urtis

Articulos interesantes...