Saltar al contenido

Recommended Posts

publicado

Saludos @torquemada y @Israel Cassales espero estén bien, tengo una serie de fechas en la Columna “U” de la Hoja3 (MATRIZ) que representan la cantidad de días entre dos eventos determinados dichas fechas necesito que se evalúen, ordenen y filtren por pares de fechas desde el par más antiguo hasta el más reciente para aquellos casos en que la Columna “AU” de la Hoja3 (MATRIZ) cumpla con los siguientes criterios AU<>"" y AU="", en concreto requiero que mediante los criterios antes mencionados se evalúen, ordenen y filtren por separado cuál de los pares de fechas posee mayor cantidad de días entre las dos fechas para lo cual he intentado con las siguientes formulas:

INDICE(ORDENAR(FILTRAR(MATRIZ!$U$2:$U$3018;MATRIZ!$AU$2:$AU$3018="");;1);1)
INDICE(ORDENAR(FILTRAR(MATRIZ!$U$2:$U$3018;MATRIZ!$AU$2:$AU$3018="");;1);2)
INDICE(ORDENAR(FILTRAR(MATRIZ!$U$2:$U$3018;MATRIZ!$AU$2:$AU$3018<>"");;1);1)
INDICE(ORDENAR(FILTRAR(MATRIZ!$U$2:$U$3018;MATRIZ!$AU$2:$AU$3018<>"");;1);2)

Como se puede observar en la Hoja3 (MATRIZ) hay un total de 18 fechas individuales repartidas desde la Celda “U3” hasta la Celda “U20” de la Hoja3, con los datos actuales las fórmulas deberían evaluar, ordenar y filtrar aquellos eventos correspondientes AU=””, obteniendo como resultado un conjunto de 14 pares de fechas, mientras que para aquellos eventos correspondientes AU<>”” se deberían obtener como resultado un conjunto de (02 pares) de fechas, las fórmulas deberían evaluar individualmente la cantidad especifica de días correspondiente a cada par de fechas seleccionando el par de fechas con mayor cantidad de días en consecuencia el par de fechas con el valor más alto cuando AU=”” es 147 Días del 07/07/2023 al 01/12/2023 y cuando AU<>”” es 432 Días del 23/02/2023 al 30/04/2023

Sin embargo, en los dos casos contemplados AU=”” y AU<>”” las fórmulas solo evalúan, ordenan y filtran el primer par de fechas de cada criterio mostrando como resultado en la Hoja65 (CARTELERA) como el par de fechas con el valor más alto cuando AU=”” es 28 Días del 01/01/2023 al 29/01/2023 y cuando AU<>”” es 37 Días del 17/01/2023 al 23/02/2023

¿Podrían ayudarme hacer funcionales estas formulas? Mucho les sabre agradecer la ayuda que me puedan dar.

N° DE DIAS PRUEBA.xlsm

publicado

Que tal juesadjunto una propuesta de solución empleado estas fórmulas:

=LET(d,ORDENAR(FILTRAR(MATRIZ[FECHA], MATRIZ!AU3:AU20="")), m, APILARH(EXCLUIR(d, -1), EXCLUIR(d, 1)), b, BYROW(m*{-1, 1}, SUMA), FILTRAR(APILARH(m,TEXTO(b,"# ""DIAS""")), b=MAX(b)))

=LET(d,ORDENAR(FILTRAR(MATRIZ[FECHA], MATRIZ!AU3:AU20<>"")), m, APILARH(EXCLUIR(d, -1), EXCLUIR(d, 1)), b, BYROW(m*{-1, 1}, SUMA), FILTRAR(APILARH(m,TEXTO(b,"# ""DIAS""")), b=MAX(b)))

Espero le sea útil.

N° DE DIAS (SOLUCION).xlsm

publicado

Saludos  @Oscar_MRF  espero estes bien, su solución funciona excelentemente bien, pero como nunca antes habia trabajado con la función LET tengo algunas interrogantes.

La Columna “U” y la Columana “AU” pertenecen a una MATRIZ que se alimenta periódicamente por lo que su contenido siempre va en aumento razón por la cual al intentar agregar datos y/o manipular su ubicación me percate que la formula no funciona dinámicamente sino que muestra de inmediato #¿NOMBRE? en las Celdas “C3” y “C5” mientras que las Celdas “D3”, “D5”, “E3”, “E5” se muestran en blanco por lo que necesito que en la medida que la MATRIZ valla creciendo la formula pueda procesar los nuevos datos y actualizar la información automáticamente.

La Hoja2 (CARTELERA) es un resumen de diversos indicadores que por razones legales debo imprimir y publicar periódicamente razón por la cual los datos deben aparecer en celdas específicas de allí que necesito que las Fechas “DESDE” (“AF20”, “AO20”), “HASTA” (“AF22”, “AO22”) y el Récord en Días (“AF15”, “AO15”) aparezcan en las celdas anteriormente especificadas de la Hoja2 (CARTELERA) para poder publicar toda la información de forma ordenada y entendible.

 

publicado

Saludos @Oscar_MRF espero estes bien 

Resultó el detalle de la ubicación de los resultados aún persiste el detalle de que cuando agrego datos en la  Columna “U” y la Columana “AU” de lHoja MATRIZ no funciona dinámicamente sino que muestra de inmediato #¿NOMBRE? En las Celdas donde se ejecuta la fórmula coloque un par de fechas en U3 y U4 y un código en AU3 para que visualice mejor lo que le comento 

N° DE DIAS (SOLUCION).xlsm

publicado

Aunque no he sido invitado, por si acaso te interesa, te subo un archivo fácil de construir e interpretar.  Los resultados finales pueden ser recogidos fácilmente en otra hoja modificando colores, formatos, etc. etc....

Saludos,

N° DE DIAS (G).xlsx

publicado
hace 3 horas, Victor7 dijo:

Aunque no he sido invitado, por si acaso te interesa, te subo un archivo fácil de construir e interpretar.  Los resultados finales pueden ser recogidos fácilmente en otra hoja modificando colores, formatos, etc. etc....

Saludos,

N° DE DIAS (G).xlsx 29.2 kB · 1 descarga

Saludos @Victor7 gracias por ayudarme a solventar mi problema, su solución me parece más viable y entendible sin embargo por la forma como recoge los datos la MATRIZ añadí cuatro columnas donde de separo las fechas y días de cada evento para poder aplicar sus fórmulas pero interpreto que como hay celdas vacias entre datos las  formulas se desbordan o aparece #¡REF!y por lo tanto  no me da el mismo resultado que a usted sería posible reconfigurar sus formulas para adaptarlas a la forma como puedo separar los datos ..?? Adjunto el archivo modificado 

publicado

El problema está en que la función =FILTRAR no responde bien dentro de una tabla. Es necesario ejecutarla fuera de un rango como tal.

Si le es imprescindible que las 6 columnas de la hoja 'Matriz' estén unidas, lo que puede hacer es introducir las fórmulas de AZ3:BC3 en , por ejemplo, BF3:BI3 y verá que los resultados son los esperados.  Después, vaya eliminando columnas a partir de AZ, hasta que queden 'unidas' las 6 columnas.  También tendrá que modificar (reconstruir) los datos de la hoja 'Cartelera (2)' para que recojan los esperados.

Una última sugerencia:  Tal vez le interese aplicar a las celdas AF20, AF22 [y otras] este formato personalizado: #  "DÍAS"

Saludos,

Conéctate para comentar

Podrás dejar un comentario después de conectarte



Conéctate ahora
  • 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

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • 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 
  • 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.