Macro de VBA para ordenar y aplicar formato condicional a un rango de celdas con un número dinámico de filas

Macro de VBA para ordenar y aplicar formato condicional a un rango de celdas con un número dinámico de filas

Tengo un rango (la imagen de abajo).

captura de pantalla de Excel

Tenga en cuenta que:

  • El rango lo genera otra aplicación, por lo que el número de filas cambia constantemente y no tiene el formato de una "tabla" de Excel.
  • El número de columnas, sin embargo, es fijo.
  • Siempre hay una Totalsfila, que siempre es la última fila (las celdas más allá de esta, sin embargo, contienen una fórmula que se evalúa como '')

Quiero ayuda con una macro de VBA que ordenará el rango usando el encabezado Dcomo clave (ascendente):

[Ver enlace a la tabla ordenada a continuación]

Tenga en cuenta que:

  • La Totalsfila (que siempre es la última fila) debe ignorarse y no ordenarse.

Después de esta clasificación, quiero que la misma macro VBA aplique formato condicional al rango usando el mismo encabezado Dque la clave; el formato aplica un borde alrededor del rango donde Des el mismo:

La mesa final está aquí:http://goo.gl/H118Lx

Tenga en cuenta que:

  • No quiero un borde alrededor de valores únicos en el encabezado, Des decir, filas donde el recuento de valores de celda no es mayor que 1.

Respuesta1

No necesitas VBA en absoluto. Sólo necesita una mejor comprensión de la flexibilidad detrás de los formatos condicionales. Por eso, voy a responder la pregunta aunque sea pobre.

Puede ordenar por columna Dtal como está y la fila de totales estará en la parte inferior si es la única que tiene un espacio en blanco. Aplique sus formatos condicionales a toda la columna como se muestra a continuación.

Formato: Bordes a la izquierda
Rango: A:A
Fórmula:=AND($D1<>"",OR($D1=OFFSET($D1,-1,0),$D1=OFFSET($D1,1,0)))

Formato: Bordes a la derecha
Rango: E:E
Fórmula:=AND($D1<>"",OR($D1=OFFSET($D1,-1,0),$D1=OFFSET($D1,1,0)))

Formato: Bordes en la parte superior
Rango: A:E
Fórmula:=AND($D1<>"",$D1<>OFFSET($D1,-1,0),$D1=OFFSET($D1,1,0))

Formato: Bordes en la parte inferior
Rango: A:E
Fórmula:=AND($D1<>"",$D1=OFFSET($D1,-1,0),$D1<>OFFSET($D1,1,0))


Este método convertirá esta hoja:

Antes

... en esta hoja:

Después

información relacionada