Aplicar cambios según valor en vba

Tengo una macro para cambiar el color según el valor. La Qüestion es que los valores pueden estar entre 0 i 1,8, según eso aplicar color según ese rango. En el caso verde1 seria entre 1.6 i 1.8, verde 2 seria 1.5, amarillo seria 1.4, naranja, 1.3 i rojo entre 0 y 1.2. Como pongo ese "entre", en vba. ¿Por otro lado la macro se puede ejecutar automáticamente según el valor introducido?, ¿Es decir que cambie de color si tener que asignarlo a un botón?
Gracias de antemano.
Te paso también las macros que uso.
Private Sub CommandButton1_Click()
fila1 = 5
fila2 = 31
col1 = 8
col2 = 8
For fila = fila1 To fila2
For columna = col1 To col2
valor = Cells(fila, columna).Value
Select Case valor
Case Is = "B"
Cells(fila, columna).Interior.ColorIndex = 6 ' amarillo
Case Is = "SUF"
Cells(fila, columna).Interior.ColorIndex = 45 'naranja
Case Is = "NOT"
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Is = "EX"
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Else
Cells(fila, columna).Interior.ColorIndex = 3 'rojo
End Select
Next columna
Next fila
End Sub
Private Sub Control_Click()
fila1 = 5
fila2 = 31
col1 = 15
col2 = 15
For fila = fila1 To fila2
For columna = col1 To col2
valor = Cells(fila, columna).Value
Select Case valor
Case Is = "B"
Cells(fila, columna).Interior.ColorIndex = 6 'amarillo
Case Is = "SUF"
Cells(fila, columna).Interior.ColorIndex = 45 'naranja
Case Is = "NOT"
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Is = "EX"
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Else
Cells(fila, columna).Interior.ColorIndex = 3 'rojo
End Select
Next columna
Next fila
End Sub
Private Sub CommandButton2_Click()
fila1 = 5
fila2 = 31
col1 = 2
col2 = 7
For fila = fila1 To fila2
For columna = col1 To col2
valor = Cells(fila, columna).Value
Select Case valor
Case Is = 1, 4
Cells(fila, columna).Interior.ColorIndex = 6 'amarillo
Case Is = 1, 3
Cells(fila, columna).Interior.ColorIndex = 45 'naranja
Case Is = 1, 5
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Is >= 1, 6
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Else
Cells(fila, columna).Interior.ColorIndex = 3 'rojo
End Select
Next columna
Next fila
End Sub
Gracias de nuevo

1 Respuesta

Respuesta
1
Para definir límites tienes que hacerlo de la siguiente forma:
Case Is >= 1, 6 And <=1,8
Si quieres que se ejecute desde la misma hoja sin tener que presionar botones, tienes que poner tu código en el evento de:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Con esto cada vez que cambies los valores el código se ejecutará.
[email protected]
Gracias por el aporte, pero una duda más:
El código
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Lo tengo que colocar en la hoja o en el ThisWorkbook..., i supongo que tendré que quitar Private Sub CommandButton1_Click(), ¿verdad?
GRacias de nuevo por tu valuosa aportación.
Eso es un evento de Hoja. Tienes que darle doble click en el Editor de VBA a la hoja que quieres colocarle el código. Una vez ahí, en la parte derecha de arriba buscas el evento Change.
[email protected]
Hola de nuevo.
Case Is >= 1, 5 And <=1, 8 , me da error de compilación. Se esperava:expresion resalta el <= 1, 8.
Gracias de nuevo por tu tiempo i experiencia.
Enciérralos en paréntesis, recuerda la lógica matemática.
Case Is >= ((1, 5) And <=(1, 8))
[email protected]
Gracias de nuevo, y siento mi poca experiencia en el tema, pero
Case Is >= ((1, 5) And <=(1, 8)), me da un nuevo error. Error de compilacion. Se esperava:) i me mraca la primera com del 1,5... Estoy perdido.
Gracias de nuevo i perdona mi poca experiencia.
Case Is  1, 5 To 1, 8
[email protected]
Gracias por tu respuesta. El problema se solucionó, aunque lo del cambio de color cuando se cambia el valor no funciona.
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Sub canvi1()
fila1 = 5
fila2 = 31
col1 = 8
col2 = 8
For fila = fila1 To fila2
For columna = col1 To col2
valor = Cells(fila, columna).Value
Select Case valor
Case Is = "B"
Cells(fila, columna).Interior.ColorIndex = 6 'amarillo
Case Is = "SUF"
Cells(fila, columna).Interior.ColorIndex = 45 'naranja
Case Is = "NOT"
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Is = "EX"
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Else
Cells(fila, columna).Interior.ColorIndex = 3 'rojo
End Select
Next columna
Next fila
End Sub
Sub canvi()
fila1 = 5
fila2 = 31
col1 = 15
col2 = 15
For fila = fila1 To fila2
For columna = col1 To col2
valor = Cells(fila, columna).Value
Select Case valor
Case Is = "B"
Cells(fila, columna).Interior.ColorIndex = 6 'amarillo
Case Is = "SUF"
Cells(fila, columna).Interior.ColorIndex = 45 'naranja
Case Is = "NOT"
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Is = "EX"
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Else
Cells(fila, columna).Interior.ColorIndex = 3 'rojo
End Select
Next columna
Next fila
End Sub
Sub canvi11()
fila1 = 5
fila2 = 31
col1 = 2
col2 = 7
For fila = fila1 To fila2
For columna = col1 To col2
valor = Cells(fila, columna).Value
Select Case valor
Case Is = 1, 4
Cells(fila, columna).Interior.ColorIndex = 6 'amarillo
Case Is = 1, 3
Cells(fila, columna).Interior.ColorIndex = 45 'naranja
Case Is >= 1, 5 To 1, 8
Cells(fila, columna).Interior.ColorIndex = 4 'verde
Case Else
Cells(fila, columna).Interior.ColorIndex = 3 'rojo
End Select
Next columna
Next fila
End Sub
Gracias por el tiempo que estas destinando al tema.
Lógico porque tienes que eliminar las filas 1 y 2 de tu código.
[email protected]
Me imagino que uno de los problemas radica en la forma que digitas los números, en lugar de poner: 1,5 - puedes poner 1.5
[email protected]
Gracias de nuevo
Voy bastante perdido, sigue sin funcionarme...
Si acaso te envío el archivo a ver que ves.
Gracias
Envíalo sin promesas.
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas