Numeracion vertical por color

2 envíos / 0 nuevos
Último envío
bernardo araneda
Imagen de bernardo araneda
Offline
última acción: Hace 2 semanas 6 días
alta: 02/09/2019 - 02:18
Puntos: 25
Numeracion vertical por color

Gusto en saludar, tengo una matriz de un calendario en donde necesito enumerar en forma correlativa por semana. Si la celda es de un color diferente a blanco que se vaya autonumerando verticalmente desde arriba hacia abajo cuando yo presione un boton en funcion a la semana que yo desee.

He intentado varias opciones con macros, pero no me resulta.

Saludos

Bernardo Araneda

AdjuntoTamaño
File numerar_celda.xlsm3.19 MB
Cron
Imagen de Cron
Offline
última acción: Hace 3 días 23 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12415
Hay dos propiedades de la

Hay dos propiedades de la celda que hacen referencia al color:

-Interior.Color

-Interior.Pattern

Y luego están las propiedades accesorias, como Interior.Colorindex o Interior.PatternColor, que son otras maneras de hacer referencia a lo mismo.

¿Por qué son importantes ambas? Bueno, porque las celdas blancas habitualmente no son blancas. Son celdas "sin color". Y eso no es un color en sí, es un patrón. Es decir, las celdas "sin color" en realidad pueden ser de cualquier color, solo que tienen un patrón que no lo muestra.

Dicho esto, ya sabemos que lo que tenemos que revisar no es tanto el color como el patrón (o la trama). Si nuestro color es siempre sólido, entonces el valor de Interior.Pattern será 1. Si es otra cosa, será otro valor, probablemente negativo. Como en tu hoja algunas celdas sí son blancas, entonces hay que añadir una comparación más: que el color no sea 16777215 (blanco)

Pues ya tenemos nuestra comparación!!

Ve recorriendo las celdas hacia abajo. Para esto te vale cualquier tipo de bucle. Comprueba que el valor de la propiedad interior.pattern de la celda es 1, y entonces cámbiale el valor.

Por ejemplo:

cont = 0 'Para llevar la cuenta

For i = 7 to 61

  if cells(i, 39).Interior.Pattern = 1 and cells(i, 39).Interior.Color <> 16777215 then

    cells(i, 39).value = cells(3, 39).value + cont

    cont = cont + 1

  end if

Next

 

Yo he fijado la columna 39. Tú deberás ver qué haces con eso. Puedes hacer también un bucle, puedes localizar la última columna con valor en la fila 2, puedes fijar la columna para que utilice la de la celda que esté activa... Lo que prefieras.

 

Un saludo