Saltar al contenido

Combinación de condiciones para obtener un resultado


Alovm

Recommended Posts

publicado

Tengo un archivo donde quiero distribuir el resultado obtenido en la celda E757 en todas las filas desde la I2:I753, pero que  sólo corra la fórmula con las siguientes condiciones:

 

Que solo aplique la fórmula en el grupo de datos q mantenga la misma hora que la columna C, es decir, cada vez que cambia la hora de la columna C debe empezar de nuevo la sumatoria.

Que aplique el mismo incremento del resultado obtenido de la celda E757 en la columna J desde J2:J753, pero que solo lo aplique si en la columna I de la misma fila el resultado es >1.

He usado si anidado y la función min, pero todavía no logro llegar a la fórmula que cumpla con todas las condiciones.

 

 

Gracias, 

                   

 

Prueba.xlsx

publicado

Hola,

No acabo de ver claro cuál es el objetivo que persigues ni el resultado REAL que debe aparecer ¿en cada una de las filas afectadas? ¿en la suma total?

Hagamos una cosa:  para tenerlo claro, subo tu archivo, aunque lo he simplificado al máximo, eliminando los datos de varias columnas, que entiendo no aportan nada para obtener la solución o soluciones que buscas.

En la columna C he modificado el color, sólo por facilitar visualmente cada vez de se modifica la hora (creo que esa es una de las premisas para la determinación de la fórmula o fórmulas a emplear).

Sería interesante que introdujeras a mano los datos que esperas ver allá donde sea necesario (¿columnas J y K?), y explicar si la suma de esas cifras debe dar alguna cantidad concreta, o qué resultado/s quieres obtener.

Nota:  La suma de los datos de la columna E multiplicada por un porcentaje (¿a voluntad?) puede ofrecer un resultado con decimales (datos no enteros), que veo que repites en la columna H.  No sé si eso es significativo.

En fin, creo que iría bien que aclararas esos detalles, para avanzar en la resolución del problema.

Saludos,

 

Prueba (B).xlsx

publicado

Hola @Victor7, gracias por tu apoyo, te comparto de nuevo el archivo con una guía manual de los datos y el qué,  de dónde y por qué?, Esperando poder obtener el cómo con su ayuda. 

 

 

Saludos, 

Prueba (B).xlsx

publicado

Lo siento, pero hay detalles que no los entiendo.  En uno de tus textos señalas que el cálculo se puede aumentar el cualquiera de los inputs de una determinada hora, pero más tarde indicas que el total hay que distribuirlo en todos los valores de la columna E........... algo confuso, al menos para mí.

Hay un dato importante que veo que no has seguido:

hace 12 horas, Victor7 dijo:

...Sería interesante que introdujeras a mano los datos que esperas ver allá donde sea necesario...

Creo que eso va a ser lo que nos dé la pista definitiva para acometer el trabajo.

Mira, imagina que no existe Excel. Ya sé que es difícil, pero supongamos que es así.  En vista de la situación, sólo podemos disponer de papel, lápiz y una vulgar calculadora. Tenemos escritos en el papel los datos que vemos en la columna C (horas) y en la columna E (número de eventos). Sumamos el total de eventos, obtenemos 125 y tenemos que "ajustar" un 7%, lo que nos da 9 (entero redondeado al alza). A partir de aquí, tenemos que hacer otros cálculos, en base a determinados criterios. ¿Cómo empezamos? ¿Qué cálculos tenemos que desarrollar?

Supongo que completar la columna I sería el objetivo (y la fórmula que tienes ahora no te ofrece el resultado que buscas). Pues bien, ¿qué número concreto debería aparecer en la celda I2? ¿Cómo lo obtenemos? Después pasamos a I3; mismas preguntas: ¿qué número tiene que aparecer ahí y por qué?  ...y así sucesivamente, hasta completar el rango hasta I22.

Insisto en que completes a mano esos resultados; va a ser la mejor forma de entender fondo y forma del problema.

publicado

Hola de nuevo,

Te adjunto el archivo simplificado, tal como he entendido el desarrollo, reconstruyendo los cálculos.

Algunas fórmulas son M365 (matrices derramadas), que no deberían dar problemas ya que utilizas esa versión.

En cuanto a la prorrata, la he asignado al máximo en número de eventos que tiene esa hora; si hay que aplicarlas a voluntad (o aleatoriamente), me temo que no habrá fórmula capaz de hacerlo)...

Bastará con introducir horas y eventos (columnas C y E) y porcentaje a redistribuir, en E25; el resto se [re]calculará automáticamente.

Saludos,

Prueba (C).xlsx

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

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • 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.