Saltar al contenido

Comparar registros en base a criterios inteligentes


merlow

Recommended Posts

publicado

Amigos y Maestros:

Buenas Tardes.

En esta oportunidad les solicito ayuda para resolver este tema (a mi criterio bastante dificil de hacer), por lo que debo pedir asistencia a Uds, los maestros del excel, para resolver mi problema.

Estoy tratando de hacer alguna especie de planilla validadora de stock para la venta, para esto les presento el archivo que adjunto:

Columna A: Una Categoría Global para el producto

Columna B: El codigo que identifica al producto (no existen 2 repetidos)

Columna C: El stock actual de ese producto.

Columna D: La rentabilidad que me genera la venta de ese producto.

Columna E: La cantidad de unidades que siempre debo tener en la gondola

Como distribuidor de varios productos; siempre debo tener en mis gondolas esa cantidad de unidades y me gustaria automatizar la tarea que diariamente me toma 3 o 4 horas hacer. Me gustaría armar algo funcional siguiendo la siguiente lógica: (esta es la logica que hago yo al momento de armar los pedidos a mi proveedor)

Voy a tomar el Material con Identificador 351 como ejemplo.

Dado que me gusta ganar dinero, siempre debo vender el producto que me genere mayor rentabilidad, para lo cual, estaría el material que me genera una rentabilidad del 49% . Pero como no tiene stock, lo paso por alto. Veo que tengo otras opciones y sigo analizando en base a la rentabilidad. Como tengo otra opcion (una de 48,18%), miro si tiene stock. Como tiene stock, debo comparar la cantidad que hay en stock de ese producto contra el consumo.

En este caso, como el consumo es de 1400 unidades, y solo hay en stock 1263, debo seleccionar esos 1263 y cubrir el remanente con algun otro material del mismo identificador que arroje la mayor rentabilidad siguiente.

Es decir, en este caso estaria pidiendo a mi proveedor 137 unidades que tienen una rentabilidad del 31,03%.

Estos dos registros deberian copiarse en otra hoja.

El analisis de este caso en particular no es muy complicado. Lo dificil es hacerlo con 4000 registros o más, lo cual se vuelve bastante tedioso.

Había pensado en alguna clase de bucle For Each definiendo alguna variable; pero me pierdo al hacer las comparaciones ya que no encuentro un punto de partida.

Espero que Uds puedan orientarme en esta tarea.

Les adjunto el archivo en caso de que quieran probar algo.

Desde ya, muchas Gracias a Todos.

Saludos.!

BaseFORO2.zip

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
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Que tal nuevamente,  adjunto una solución alternativa: =MAX(A:.A)-BYROW(F4:.AK20,LAMBDA(r,BUSCAR(2,1/(r=0),F3:.AK3))) Cabe mencionar que esta solución requiere funciones nuevas como RECORTAR.RANGO. CONTADOR FINAL (Solucion).xlsb
    • Buenos días,  espero se encuentren bien de salud compañeros, Favor me podrían ayuda con lo siguientes como se podría hacer cuando tengo una tabla dinámica que  amedida que se aumente las columnas fechas con data un formula que se coloco al final busque o analice siempre la ultima fila y columna de la fecha. Coloco un ejemplo
    • @JSDJSD Excelentes, GRACIAS POR TU SOPORTE , me ayudo demasiado es exactamente lo que quería. 5 ESTRELLAS
    • 'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub   TABLA ELIMINAR.xlsm
  • 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.