Saltar al contenido

Problema con el formato condicional


garbage

Recommended Posts

publicado

Buenas!!

Tengo un problema (más que problema es una duda), con el formato condicional. El caso es que parto de la siguiente hoja de cálculo de Excel:

[url=https://imgbb.com/][img]https://i.ibb.co/74wSG6X/1.png[/img][/url]

 

Y quiero crear varios formatos condicionales para el rango C2:C12:

- Si la celda presenta datos menores o iguales que o, que no se formatee.

- Si la celda presenta datos menores que 100.000, que se ponga con un relleno de color verde.

- Si la celda presenta datos comprendidos entre 100.000 y 150.000, que se ponga con un relleno de color amarillo.

- Si la celda presenta datos mayores a 150.000, que se ponga con un relleno de color rojo.

El caso es que si creo los formatos condicionales de la forma que se puede ver en la siguiente imagen, sí funciona:

https://ibb.co/7KWX6LT

 

Entiendo que cuando, por ejemplo, en la celda C3, que contiene un 0, cuando se cumple la primera condición (que el valor sea menor o igual a 0), se ponga la celda sin formato y ya no siga evaluando las condiciones (por eso he marcado la casilla "Detener si es verdad". Hasta ahí lo entiendo.

Lo que no entiendo es que si cambio el orden de las reglas y desmarco la casilla "Detener si es verdad", ya no funciona:

https://ibb.co/0Bk3bf0

 

Mi razonamiento es el siguiente, siguiendo el ejemplo anterior, aplicado a la celda C3. Aplica la primera regla de formato condicional (valor de celda menor que 100.000). Como la celda C3 presenta un valor 0, cumple la regla, por lo tanto se aplica color de relleno verde, y como no está activada la casilla "Detener si es verdad" para la regla, sigue ejecutando la siguiente regla, que es si el valor de la celda es menor o igual a 0. En este caso, la celda C3 también cumple la condición, por lo que se debería de quedar sin formato dicha celda, pero por la razón que sea no lo hace... Está claro que algo se me escapa...

¿Podéis arrojar algo de luz al tema?

Gracias!!

publicado

Pongo por aquí las imágenes, porque no me deja editar el post anterior y no se veían las imágenes. Están en el mismo orden que en el post de arriba:

Imagen 1:

1.png

 

Imagen 2:

2.jpg

 

Imagen 3:

3.jpg

publicado

Hola @garbage! Debes adjuntar el archivo de excel sobre el que trabajaste para poder ayudarte, igual me parece curioso que, googleando tu consulta para poder responderte con más detalle, esta es la primera página que aparece y tiene tu mismo archivo!

Al margen de eso, tengo entendido que la función de detener si es verdad no afecta a versiones nuevas de excel, solo se mantuvo por compatibilidad con las versiones viejas (anteriores a 2007) que no permitían aplicar varias reglas simultaneamente.

Según microsoft: El orden en el que se evalúan las reglas de formato condicional (su precedencia) también refleja su importancia relativa: cuanto más alta esté una regla en la lista de reglas de formato condicional, más importante será. Esto significa que, en los casos en los que se producen conflictos entre dos reglas de formato condicional, la regla que está en la parte superior de la lista se aplica y la regla que está por debajo de la lista no.

En tu última imagen, las primeras 2 reglas entran en conflicto (todos los valores menores que 0 son también menores que 100000) por lo que solamente se aplica la primera regla -que tiene precedencia sobre la segunda- y las celdas se pintan de verde.

Fijate en el archivo que subo de ejemplo, en el cual las 3 reglas estan en conflicto. Si las reglas se ordenan de acuerdo al primer caso el resultado es correcto, pero en el orden opuesto no, tal como se ve en el segundo caso. Esto es porque todos los valores mayores que 100000 o 150000 son a su vez mayores que 0 y siendo que la primera regla es la que tiene precedencia es la unica que se aplica.

Para dejar la celda sin formatear no creo necesario poner una regla!

Saludos!

Foro.xlsx

publicado

Gracias por tu respuesta @Cristian 1985. Efectivamente, el ejemplo lo saqué de la Web que indicas, porque no acababa de entender la lógica de la opción "detener si es verdad", y la verdad es que con ese ejemplo (el de la otra Web), sigo sin verlo del todo claro. Además, como bien comentas, para dejar una celda sin formatear no hace falta crear una regla de formato condicional ?

Un saludo.

 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Current Donation Goals

    • Raised 0.00 EUR of 130.00 EUR target
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
    • Podrías compartir tu solucion
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.