Crear macro VB para restar valores en diferentes filas

Tengo una tabla de datos con las siguientes informaciones:

Fecha Material HoraMuestra Estado

4-12-18 27694 7:30:00 Fin Lote

4-12-18 27694 7:15:27 Inicio Lote

4-12-18 27694 7:20:31 Inicio Lote

3-12-18 24747 10:10:08 Fin Lote

3-12-18 24747 9:45:25 Inicio Lote

Con esta información quiero saber cuanto he tardado (en minutos), del material x por día.

En las diferentes filas hay un listado de muestras tomadas y quiero saber, por día y material, la diferencia entre el máximo y el mínimo.

Es importante decir que puede haber mas de 2 materiales por día (solo me interesa la primera hora y la ultima hora, para después restarlas) y también puede que haya materiales con solo 1 registro (porque se habrán olvidado de apuntar la hora de inicio o final)

No se me ocurre ninguna opción si VB.

¿Alguien me podría ayudar a configurar el VB para que haga esta operación?

1 Respuesta

Respuesta

[Hola

Suponiendo varias cosas:

- Todo comienza en "A1"

- Los tiempos de todos modos están en la columna "C"

- Los códigos son solo númericos

Entonces, prueba así:

Sub MacroFiltro()
Dim Mifecha As Date, Fechamaxima As Date, fechaminima As Date
Dim Micodigo As Long, Ultimafila As Long, Registros As Long
Dim Rango As Range
Let Mifecha = Application.InputBox("Ingrese una fecha:", "FILTROS", Type:=2)
Let Micodigo = Application.InputBox("Ingrese un código:", "FILTROS", Type:=1)
Let Ultimafila = Cells(Rows.Count, 3).End(xlUp).Row
With Range("A1").CurrentRegion
    .AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria1:="=" & CDate(Mifecha)
    .AutoFilter Field:=2, Criteria1:=Micodigo
End With
Set Rango = ActiveSheet.AutoFilter.Range
Let Registros = Rango.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
If Registros = 0 Then
    MsgBox "No hay registros con esos datos"
    Range("A1").AutoFilter
    Exit Sub
ElseIf Registros = 1 Then
    MsgBox "Solo hay un registro con esos datos"
    Range("A1").AutoFilter
    Exit Sub
End If
Let Fechamaxima = Application.WorksheetFunction.Subtotal(4, Range("C2:C" & Ultimafila))
Let fechaminima = Application.WorksheetFunction.Subtotal(5, Range("C2:C" & Ultimafila))
MsgBox "La diferencia de tiempo es: " & Format(Fechamaxima - fechaminima, "hh:mm:ss")
End Sub

OJO, ingresa bien las fechas, y no he puesto controladores de errores y/o de uso del botón"Cancelar" en los "InputBox" pero ya tú prueba y vas agregando/cambiando.

Saludos]

Abraham Valencia

Gracias Abraham,

He visto la macro, pero no es lo que estaba pensando.

Como son muchas líneas de datos (casi 2000) no es factible ir señalando cada vez línea por línea la fecha, material....

Hay alguna manera de hacer una macro que, por ejemplo, sitúe en una columna adicional (la podemos llamar HoraMuestra2 y ponerla al lado de la columna de "Estado") con la hora inicial

Había pensado en alguna macro que, tiniendo ordenado los datos por Material y por hora, ponga en esta columna (HoraMuestra2) el valor de la columna (HoraMuestra) antes que "salte" a otro material.

Muchas gracias!

[Hola nuevamente

Tienes que hacer una macro de varios bucles lo que requiere un tiempo que, por lo menos en mi caso, excede el que doy para ayudar (al ser esto algo "ad honorem" casi todos solo damos los -pocos- tiempos libres que tenemos).

Quizá puedas ayudarte/guiarte en algo con lo que te he enviado, quizá una forma sea así, con filtros, pero bueno la programación es cosa de imaginación.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas