Colorear celdas según condiciones

Tengo una hoja Excel con letras (M, T, N, D, V) en los rangos de celdas B8:H8, K8:Q8, B13:H13, K13:Q13 y números en los rangos de las celdas inmediatas superiores B7:H7, K7:Q7, B12:H:12 y K12:Q12.
Necesitaría una macro para que las celdas con letras se coloreen según la letra que aparezca en cada una y las superiores, con números, se coloreen con otro color según la letra que aparezca en cada celda del rango inferior.

1 Respuesta

Respuesta
1
Si tenés versión Excel 2007 podes utilizar formato condicional. Sino necesitarás una rutina porque la cantidad de condiciones supera las 3 permitidas.
La que te adjunto, y que la ajusté para otra usuaria, tiene una lista de valores en col H (tus letras) y en col I los colores que le corresponde a cada una .
Hay comentarios en la rutina para que ajustes a tus necesidades.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Asigna color segun 'letra' insertada en rango
Set Relcell = Range("B7:B28")   'ajustar rangos
If Not Application.Intersect(Relcell, Range(Target.Address(False, False))) Is Nothing Then
dato = Target.Value
Set busco = ActiveSheet.Range("H2:H50").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then
Target.Interior.ColorIndex = busco.Offset(0, 1).Interior.ColorIndex
End If
Set busco = Nothing
End If
Set Relcell = Nothing
End Sub
Aquí construí una lista en col H y los colores en col I, pero si los colores estarán en la misma col H, quítale el Offset que te marqué con negrita.
Si necesitas ayuda en el armado, escribime nuevamente.
Hola y gracias por las molestias,
He puesto las letras en varias celdas de la columna H y los colores correspondientes en la columna I. En la columna B, a partir de la fila 7 he puesto las mismas letras que en la columna B.
He insertado el código en un móodulo de la hoja Excel, pero al cambiar las letras no se colorea ninguna celda.
Te agradeceré me indiques que es lo que hago mal y si no es abusar demasiado te agradeceré un comentario para cada linea de instrucciones, para cuando tenga que ajustarlo a los rangos de mi hoja.
Gracias por tu atención,
Es cierto, en esta respuesta no queda claro dónde ubicar la rutina, así que para vos y cualquiera que pudiera leerlo en el tablón:
ACLARACIÓN: cada vez que veas una rutina que se inicia con:
Private Sub Worksheet_.....  se coloca en el Editor, seleccionando con doble clic el objeto HOJA que corresponda, del panel a tu izquierda.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'se ejecuta x cada cambio en celdas del rango asignado a continuación
Set Relcell = Range("B7:B28")   'ajustar rangos a gusto personal
'Si la intersección entre la celda modificada y el rango definido no está vacía , significa que la celda está dentro del rango
If Not Application.Intersect(Relcell, Range(Target.Address(False, False))) Is Nothing Then
'guardo el dato ingresado en una variable
'dato = Target.Value   '- Opcional, puedo trabajar directamente con Target.Value
'busco ese dato en la col H
Set busco = ActiveSheet.Range("H2:H50").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
'si la búsqueda no quedó vacía significa que encontró el valor en la col H
If Not busco Is Nothing Then
'le asigna a la celda modificada el color de trama que se encuentra en la col sgte de H
Target.Interior.ColorIndex = busco.Offset(0, 1).Interior.ColorIndex
End If
'libero las variables
Set busco = Nothing
End If
Set Relcell = Nothing
End Sub
Aquí quedó explicada. Obviamente hay conceptos que deberás aprender, como el Offset(fila, col). Podes recurrir a mis páginas de macros o a la Ayuda de Excel.
Si todo quedó comprendido, no olvides finalizarla
Respuesta rápida, con las aclaraciones necesarias y que funciona perfectamente.
Gracias Elsa, toda mi admiración, con tus aclaraciones se aprende mucho.
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas