Excel - Buscar Veloz con el metodo FIND usando varios criterios

 
Vista:
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar Veloz con el metodo FIND usando varios criterios

Publicado por Juan (184 intervenciones) el 19/04/2021 16:01:38
Hola Estimados (as),

Como usar el método FIND para buscar entre dos hojas con varios criterios. Se prefiere usar FIND porque se entiende que con este método la búsqueda es más rápido.

Los criterios son:

IF Almac ("Pedidos") = Almacén ("Inventario") AND Articulo ("Pedidos") = Sku Articulo ("Inventario") AND Status Invent ("Inventario") = "STOCK LIB" AND (Fech Venc ("Pedidos") + Corte ("Pedidos")) <= Expira ("Inventario") THEN

-Se pide, sumar las cantidades de la columna "G" de hoja ("Inventario") y pegarlo en columna "AD" de la hoja ("Pedidos")

-Ademas descontar stock de columna "G" y el saldo colocarlo en Columna "O" de Hoja ("Inventario")

-Las cantidades descontadas según lo ordenado de la Columna "L" colocarlo en la Columna "AE" de la Columna Hoja ("Pedidos")


En la imagen está lo que se busca que haga la macro.

Este código todavía no funciona como se espera. Se adjunta Archivo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Sub Buscar_Veloz()
Dim Hoja_Inventario&, Hoja_Pedidos$, stock&, Celda_Inventario As Range, _
    Celda_InventarioAddress$, Celda_Pedidos As Range
 
Application.ScreenUpdating = False
 
Tincio = Timer
 
'Desde la ultima fila con datos suba contando las filas en la columna "I"
Hoja_Pedidos = Range("I" & Rows.Count).End(xlUp).Row
 
'Desde la ultima fila con datos suba contando las filas en la columna "C" de la Hoja "Inventario"
Hoja_Inventario = Sheets("Inventario").Range("C" & Rows.Count).End(xlUp).Row
 
For Each Celda_Pedidos In Range("I2:I" & Hoja_Pedidos)
    stock = 0
    Set Celda_Inventario = Sheets("Inventario").Range("C2:C" & Hoja_Inventario).Find(Celda_Pedidos)
 
        If Not Celda_Inventario Is Nothing Then
            If Celda_Inventario.Offset(, -2) = Celda_Pedidos.Offset(, -8) And _
               Celda_Inventario.Offset(, 0) = Celda_Pedidos.Offset(, 0) And _
               UCase(Celda_Inventario.Offset(, 11)) = "STOCK LIB" And _
               Celda_Inventario.Offset(, 6) >= (Celda_Pedidos.Offset(, -5) + Celda_Pedidos.Offset(, 2)) Then
               stock = stock + Celda_Inventario.Offset(, 4)
            'Else
                Celda_InventarioAddress = Celda_Inventario.Address
 
                Do
                Set Celda_Inventario = Sheets("Inventario").Range("C1:C" & Hoja_Inventario).FindNext(Celda_Inventario)
                If Not Celda_Inventario Is Nothing Then
                    If Celda_Inventario.Offset(, -2) = Celda_Pedidos.Offset(, -8) And _
                       Celda_Inventario.Offset(, 0) = Celda_Pedidos.Offset(, 0) And _
                       UCase(Celda_Inventario.Offset(, 11)) = "STOCK LIB" And _
                       Celda_Inventario.Offset(, 6) >= (Celda_Pedidos.Offset(, -5) + Celda_Pedidos.Offset(, 2)) Then
                       stock = stock + Celda_Inventario.Offset(, 4)
                    End If
                End If
                Loop While Celda_InventarioAddress <> Celda_Inventario.Address
                Celda_Pedidos.Offset(, 21) = stock
            End If
        End If
Next Celda_Pedidos
 
Tfin = Timer
MsgBox "El tiempo es: " & Round(Tfin - Tincio, 3)
 
End Sub


Asignado-Saldo-Inventario
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de MIGUEL
Val: 35
Ha aumentado 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Buscar Veloz con el metodo FIND usando varios criterios

Publicado por MIGUEL (13 intervenciones) el 20/04/2021 01:01:43
Buenas juan

Hasta donde yo se la función .Find no admite mas de un criterio de búsqueda.

Te dejo el archivo modificado, la estructura que tienen tus hoja hace complicada la fluidez de las macros, primero corre la macro en el libro modificado en el cual ordene la hoja inventario ya que los registros están desordenados y la macro se tarda mas en resolver el problema, después copia la macro a tu libro y veras la diferencia que te comento, te recomiendo re-estructurar tus hojas como si se tratara de un gestor de bases de datos, así será mucho mas fluido el sistema, también el duplicar información(innecesaria) en la hoja causa mayor peso y por lo tanto mas tiempo de ejecución y tiempo de apertura del archivo

PD. en el EstatusBar de Excel saldrá el progreso de la macro, por si sientes que se atasco ahí te dirá si es así o sigue trabajando(mas de 2 seg con el mismo porcentaje significa que ya no jala)

Espero te sirva.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar Veloz con el metodo FIND usando varios criterios

Publicado por Juan (184 intervenciones) el 20/04/2021 03:08:15
Buenas Estimado Miguel, gracias por el aporte, pero el reporte debe quedar como lo explico en la imagen al detalle.

Un detalle adicional: Total de Inventario Columna "AD" Hoja ("Pedidos") solo debe corresponder a Status Invent = "STOCK LIB" reportado en Hoja ("Inventario")



Asignado-Saldo-Inventario-con-su-fecha-de-Expiracion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de MIGUEL
Val: 35
Ha aumentado 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Buscar Veloz con el metodo FIND usando varios criterios

Publicado por MIGUEL (13 intervenciones) el 20/04/2021 06:03:03
Buenas juan

Para la columna AF de pedidos es facil solo agrega la siguiente linea

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Function SumarPedidos(IdProducto As String, Cantidad As Double) As Double
    Dim valor As Double
    Dim nId As String
    valor = 0
    For f = 2 To UF(Hoja4.Name, "I")
        nId = Hoja4.Range("I" & f)
        If nId = IdProducto Then
            valor = valor + CDbl(Hoja4.Range("L" & f))
            'poner stock restante en hoja pedidos
            Hoja4.Range("AD" & f) = FormatNumber(Cantidad - valor, 2)
            Hoja4.Range("AE" & f) = Hoja4.Range("L" & f)
            Hoja4.Range("AF" & f) = FormatDateTime(Hoja4.Range("D" & f).Value + Hoja4.Range("K" & f), vbShortDate)
        End If
    Next f
    SumarPedidos = valor
End Function

Para lo demas vuelvo a lo mismo, no se cuenta con una relacion unica en las hojas, te queria sugerir que agregaras la columna LOTE a la hoja pedidos pero tambien ahi tienes lotes duplicados, en el ejemplo de tu imagen hay 3 con la misma fecha de caducidad, si el lote se repite y la fecha de caducidad tambien no queda un dato unico en la hoja inventario que se pueda tomar para identificar a que fila del articulo hace referencia la hoja pedido, de la forma en que esta la macro se podria agregar un parametro mas a la funcion sumarpedidos, pero seria igual, como identificar la fila correpondiente en inventario?, a la mejor con .Find traeriamos el primer registro que coincida con la fecha Expira en la hoja inventarios pero de donde se sacaria la fecha Expira en la hoja pedidos?, si la fech!Orden y La Fech!Venc no coinciden con esta, por eso decidi hacer el descuento del stock de la suma de todos los registros del articulo en inventario.

La forma en que yo solucionaria esto para no re-estructurar todo seria agregar una columna ID a la hoja inventario y tambien a la hoja pedido, oviamente la columna ID en la hoja inventario no debe repetir valores, seria incremental el valor de esta columna, asi se facilitaria la identificacion del producto capturado en hoja pedidos, mañana te paso el archivo de como lo haria yo, porque aqui son la 23:00 hrs y ya tengo sueño XD.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar Veloz con el metodo FIND usando varios criterios

Publicado por Juan (184 intervenciones) el 20/04/2021 06:36:30
Miguel hola,

La Hoja ("Pedidos") con código de programacion se podria ordenar por Articulo-Almacen-Corte y a partir de ahí descuenta del Inventario en columna "G" Hoja ("Inventario") según criterios.

Las fechas Expira de la columna "I" Hoja ("Inventario") se repiten porque así se descarga la información del sistema porque vehículo de carga trae una cantidad determinada con la misma fecha de Expira pero elaborado en diferentes máquinas (que son mostradas como Lote: código de máquina) es por eso que en sistema se ingresa por separado teniendo la misma Fecha Expira con diferentes lotes.

Lo que tiene que hacer es la Cnt!Ord de la columna "L" y su fecha de corte (Columnas "D" + "K") en Hoja ("Pedidos") sea <= a Expira Columna "I" Hoja ("Inventario") (sino es igual, al menos que Expira sea la más inmediata superior). Si se repiten las fechas de Expira no importa de cuál línea se descuenta eso da lo mismo porque el lote no tiene importancia en este caso.

Te puedo enviar el archivo original donde tengo otro tipo de programación más convencional que hace el proceso que quiero?? solo que ahora quiero que se realice con el método FIND y FINDNEXT porque es más rápido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar Veloz con el metodo FIND usando varios criterios

Publicado por Juan (184 intervenciones) el 20/04/2021 07:04:03
Miguel,

Este es el archivo original que hace el proceso que se quiere, pero es demasiado lento, por eso quiero que la programación sea con el método Find y FindNext porque es más rápido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar Veloz con el metodo FIND usando varios criterios

Publicado por Juan (184 intervenciones) el 24/04/2021 01:50:31
?????.......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar Veloz con el metodo FIND usando varios criterios

Publicado por Juan (184 intervenciones) el 11/05/2021 09:21:59
Hola Miguel como estas, por favor has podido continuar con el código que haga el proceso. Si el mismo código que tu estas desarrollando.

Te envie antes un archivo que hace la funcion que quiero pero tiene otro tipo de programación que hace que el proceso sea demasiado lento.

Archivo: PreAsignacion Estandard
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar