Como hago una función vba para cambiar color celda

Te agradecería mucho me indiques como hacer una fórmula vba para utilizarla en una condición, si esta se cumple, que cambie de color de relleno de la celda. Quiero aplicarla con las fórmulas estándar de excel.
Alfredo

1 respuesta

Respuesta
3
Lo que pasa es que las funciones tienen como objetivo devolver un valor a una celda, por ese motivo creo que no es lógico usar una función para esto.
Por otro lado, tienes diferentes opciones para lograrlo, como es el formato condicional o usar una macro.
Si decides usar una macro, puedes hacer algo como esto:
Sub MacroColor()
ActiveCell.Select
If Selection.Value = "xx" Then
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
End Sub
La idea de este ejemplo es que teniendo una celda seleccionada, si el valor que tiene es xx entonces cambiará el color a amarillo, de lo contrario quedará igual.
Espero haber solucionado tu pregunta, sino, no dudes en preguntar nuevamente.
Esta casi perfecto, pero lo único que falta seria que la selección de un conjunto de celdas sea también automática, para aplicar los if anidados.
Alfredo
Muchas gracias por la atención, me has orientado un poco más al respecto y lo que si me ayudaría siguiendo tu recomendación seria que la macro pueda preguntar por los valores xx pero dentro de un rango de celdas. Lo que necesitaría en realidad es colorear los valores similares, un color para los xx, otro para los yy, zz y así sucesivamente.
Gracias nuevamente.
Alfredo
Tendrías entonces que hacer un bloque de If anidados, algo como:
If Selection.Value = "xx" Then
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Else
If Selection.Value = "yy" then
With Selection.Interior
.ColorIndex = 7
.Pattern = xlSolid
End With
Else
If Selection.Value = "zz" then
With Selection.Interior
.ColorIndex = 8
.Pattern = xlSolid
End With
End If
End If
End If
No sé si eso era lo que estabas preguntando.
¿Cómo así automática?
Si quieres aplicar esta macro a un rango de celdas tendrías que hacer un ciclo que recorra cada celda y la evalúe, ya que el valor de la celda es diferente para cada una.
Una forma de hacerlo sería por ejemplo evaluando por columnas, algo sencillo sería así:
=========
Sub MacroColor()
c = InputBox("Indique la columna")
a = InputBox("Desde")
b = InputBox("Hasta")
For x = Int(a) To Int(b)
Range(c & LTrim(Str(x))).Select
If Selection.Value = "xx" Then
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Else
If Selection.Value = "yy" Then
With Selection.Interior
.ColorIndex = 7
.Pattern = xlSolid
End With
Else
If Selection.Value = "zz" Then
With Selection.Interior
.ColorIndex = 8
.Pattern = xlSolid
End With
End If
End If
End If
Next x
End Sub
===========
Excelente Tavopz, realmente tus recomendaciones me han sido muy útiles, ademas tu respuesta inmediata y precisa son una apreciable ayuda para quienes navegamos buscando alguna solución. Muchas gracias por compartir tus conocimientos.
Alfredo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas