Macro que resta números e inserta una fila debajo si la diferencia está fuera de un intervalo determinado

Necesito crear una macro en excel (VBA) que me permita comparar dos fechas de dos columnas diferentes y haga lo siguiente, por ejemplo:

Si la fecha de la celda F3 es igual a la fecha de la celda E4, entonces la macro pasa a la celda F4. Aquí compara, si la fecha de la celda F4 es distinta de la fecha de la celda E6, entonces me inserta una fila entre medio de la F4 y la E6 (sería la fila F5, o simplemente podría ser una fila al final de la tabla). Y continúa comparando, si la fecha de la celda F6 es distinta de la fecha de la celda E8, entonces vuelve a insertar una fila entre medio de ambas o simplemente al final.

Esto debe realizarse para el rango total de la tabla, y sucesivamente; la idea es que no queden "vacíos" de fecha, por ejemplo: la celda F4 tiene la fecha y hora -> 01-01-2016 10:18, y la celda E6 tiene la fecha y hora -> 01-01-2016 10:32, qué pasó entre las 10:18 y las 10:32 del día 01-01-¿2016? Como no puede quedar un vacío, entonces se inserta una fila, y en dicha fila (hipotéticamente fila 5), se debe completar de la siguiente manera: en la E5 debe ir la primera fecha y hora (F4), entonces tendría las 01-01-2016 10:18; en la F5 debe ir la segunda fecha y hora (E6), entonces tendría las 01-01-2016 10:32.

Espero se entienda lo que deseo hacer, y puedan ayudarme por favor. A continuación adjunto 2 fotos, la primera es la tabla con los "vacíos" de fecha y hora, la segunda foto es parte de la tabla sin dichos vacíos, es decir, con la fila insertada y las fechas y horas como corresponde (cabe decir que las filas seleccionadas en la foto son las que inserté manualmente a modo de explicación).

PD: Se me ocurrió una forma de hacerlo, y dado que las fechas y horas pueden pasarse a números, se podría hacer una restar entre las celdas deseadas, y si dicha resta es distinta de 0, entonces se inserta una fila entre medio o al final, y los valores de las celdas serían los números que se restaron, de la misma manera se mencionó anteriormente.

Ante cualquier consulta.

1 Respuesta

Respuesta
1

Puedes hacerlo así:

Dim h As Worksheet
Set h = Hoja1
a = Range("E" & Rows.Count).End(xlUp).Row
If a < 3 Then Exit Sub
For B = 3 To a
    If Cells(B, 6) = Cells(B + 1, 5) Then
    Else
        h.Cells(B, 5).EntireRow.Insert
        B = B + 1
    End If
Next

Cambia donde dice "Hoja1" por el nombre de tu hoja.

Muchas gracias, me funciona perfecto la macro para insertar una fila debajo, pero cómo podría hacer para cumplir las condiciones de fecha:hora como se indica en la pregunta? para que no se ingrese una fila vacía, sino con la fecha y hora que corresponde. De ante mano muchas gracias!

Disculpa, así:

Dim h As Worksheet
Set h = Hoja1
a = Range("E" & Rows.Count).End(xlUp).Row
If a < 3 Then Exit Sub
For B = 3 To a
    If Cells(B, 6) = Cells(B + 1, 5) Then
    Else
        h.Cells(B + 1, 5).EntireRow.Insert
        h.Cells(B + 1, 5).Value = h.Cells(B, 6).Value
        h.Cells(B + 1, 6).Value = Cells(B + 2, 5).Value
        B = B + 1
    End If
Next B

Funciona perfecto! Crearé otra pregunta con otra duda que tengo, con unos casos especiales que no poseen un patrón de orden de fecha, espero puedas ayudarme en esa también. Muchas gracias Víctor por tu tiempo y ayuda. Saludos!

Con gusto te ayudo de nuevo si puedo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas