¿Se puede hacer con una macro?

Hola mi pregunta es si cuando la columna C, (cualquier fila) contenga la palabra SI ponga de color azul las columnas A, B, C, ¿DE y E. Se puede hacer esto? Gracias.
De modo automático, para no ejecutar la macro al final, ¿seria cómo complemento?

1 respuesta

Respuesta
1
Hace desde la semana pasada que quería responderte esta pregunta pero había algún problema con el servidor de este sitio. En fin...
Efectivamente, es posible hacerlo con una macro. Y esta puede estar asociada a un evento, de tal manera que se ejecute automáticamente; no es necesario ni apropiado que sea un complemento.
Puedes usar el evento Change para la hoja donde se pueda modificar el rango.
Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y busca
la hoja donde quieres que esto ocurra (donde harás la carga de datos). Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código)
Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'------- Variables
'crbal, ingresa aquí los rangos involucrados:
BuscarDato = "SI" 'Texto a buscar
RangoBusq = "C1:C15000" 'Rango donde buscar el dato, sin números de fila considera toda la columna
RangoPint = "A:F" 'Rango a colorear, sin números de fila considera toda la columna
'------------------------ gracias...
'verificando que el cambio haya sido en el rango de búsqueda:
Set EnRango = Application.Intersect(Range(RangoBusq), Target)
If Not EnRango Is Nothing Then
'busqueda de dato en el rango:
Set Encontrado = ActiveSheet.Range(RangoBusq).Find(BuscarDato, LookIn:=xlValues, LookAt:=xlWhole)
If Encontrado Is Nothing Then
Range(RangoPint).Interior.ColorIndex = xlNone
Else
Range(RangoPint).Interior.ColorIndex = 5
End If
Set Encontrado = Nothing
End If
Set EnRango = Nothing
End Sub
Al comienzo de la macro podrás definirle una serie de variables como por ejemplo qué palabra buscar, en qué rango y cual es el área a pintar.
Cierra el Editor de Visual basic y graba el archivo.
Verás que la macro controla, primero, que la celda modificada esté dentro de el rango de búsqueda, es decir que "SI" haya sido introducido o quitado en ese rango. Esto acelera el funcionamiento de tu hoja ya que evita que se ejecute la macro cuando cambia cualquier otra celda fuera de ese rango.
Esto debería resolver tu problema.
---
A modo de ejercicio adicional, este mismo problema puede resolverse sin necesidad de macros, a través de la función: Formato Condicional.
Esta se encuentra debajo de la opción "Formato" del menú principal. Cuando la activas, habiendo seleccionado las celdas a colorear
, una pantalla de diálogo te pedirá que ingreses la condición.
Esta puede ser evaluada sobre la misma celda (Valor de la celda) o sobre otra celda distinta a la actual (Fórmula).
Este es tu caso, así que selecciona Fórmula y en la casilla siguiente ingresa esta fórmula:
=NO(ESNOD(COINCIDIR("SI";C:C;)))
Significa que aplicará el formato si NO existe un ERROR al buscar "SI" en el rango "C"
Luego presiona el botón "Formato" y busca la solapa de "Tramas" y elige el color azul de la paleta. Presiona Aceptar para volver a la pantalla anterior y otra vez Aceptar para cerrar esta ventana de diálogo y aplicar el formato a la celda.
Tratándose de un formato, podrás copiarlo a otras celdas como cualquier otro formato de celda.
---
De todos modos, por la cantidad de celdas que afectaría, este método estaría cargando de muchos cálculos a tu planilla.
Por ello opino que es más eficiente la alternativa de usar una macro para resolverlo. (

Añade tu respuesta

Haz clic para o