es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo convertir una serie de tiempo de puntos de quiebre a una serie de tiempo de resolución de 1 segundo en Excel.

Tengo una serie de tiempo con puntos de interrupción (cuando el valor supervisado cambia se crea una nueva marca de tiempo), que se crea utilizando una precisión de 1 segundo (marcas de tiempo en formato aaaa:mm:dd:ss) y me gustaría cambiar esa serie de tiempo a una serie de tiempo con una resolución de 1 segundo.

Básicamente esto significa agregar filas y marcas de tiempo adicionales entre las marcas de tiempo de los puntos de interrupción, y estas nuevas marcas de tiempo deben contener el último valor de la entidad supervisada.

Ejemplo
Serie de tiempo con puntos de interrupción
Puntos de interrupción

Serie de tiempo con resolución de 1 segundo deseada
1 segundo de resolución

etc. Espero que entiendas la idea.

El problema es que no sé cómo comenzar con este problema, no he podido encontrar muchos casos similares en los archivos.

¿Cuál podría ser una buena manera de abordar este tipo de dilema y cómo implementar la solución descrita como un código para VBA?

Cualquier ayuda es apreciada.

Gracias
Saludos
Muje

EDICIÓN:
He creado un pequeño script que puede agregar filas faltantes y duplicar el valor de arriba en esta nueva fila. Sin embargo, todavía tengo dificultades con los casos en los que faltan más de 1 segundo de la serie de tiempo con puntos de interrupción. Código a continuación:

Opción explícita
Sub BP_to_sec()

Dim wb As Workbook
Set wb = ThisWorkbook
Dim ws As Worksheet
Set ws = wb.Sheets(“Test”)

Dim LastRow As Long
Dim RowStep As Long

Dim S As Double
S = (1 / 86400)

LastRow = Range(“A” & Rows.Count).End(xlUp).Row
For RowStep = LastRow To 3 Step -1
If Not IsEmpty(Range(“A” & RowStep)) Then
If (CDate(Range(“A” & RowStep)) > (CDate(Range(“A” & RowStep – 1)) + S)) Then
Range(“A” & RowStep).EntireRow.Insert
Cells(RowStep, 1).Value = Cells(RowStep – 1, 1).Value + S
Cells(RowStep, 2).Value = Cells(RowStep – 1, 2).Value
End If
End If
Next

MsgBox (“Ordenado”)

End Sub

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir una serie temporal de puntos de interrupción a una serie temporal de resolución de 1 segundo, es necesario agregar filas y marcas de tiempo adicionales entre las marcas de tiempo de los puntos de interrupción, y estas nuevas marcas de tiempo deben contener el último valor de la entidad monitoreada.

    Una forma de abordar este dilema es utilizar un código VBA como el proporcionado en la edición de la pregunta. Este código verifica si hay al menos 1 segundo de tiempo perdido entre dos marcas de tiempo consecutivas, y si las hay, inserta una nueva fila con una marca de tiempo exactamente un segundo después de la marca de tiempo anterior y el valor de la fila anterior.

    Sin embargo, el uso de este código solo funcionará si hay como máximo 1 segundo de tiempo perdido entre dos marcas de tiempo consecutivas. Si hay más de 1 segundo de tiempo perdido, el código solo insertará una nueva fila y no podrá duplicar los valores correctamente. En este caso, se necesita un algoritmo más sofisticado para insertar las filas faltantes y duplicar los valores adecuadamente.

    En general, para implementar la solución descrita como un código para VBA, necesitas:

    1. Abrir la hoja de cálculo con la serie temporal de puntos de interrupción.
    2. Recorrer cada fila de los datos.
    3. Verificar si hay al menos 1 segundo de tiempo perdido entre la marca de tiempo actual y la marca de tiempo anterior.
    4. Si hay tiempo perdido, insertar una o más filas nuevas con marcas de tiempo y valores.
    5. Continuar con la siguiente fila hasta que se hayan revisado todas las filas.

    Siguiendo este enfoque, puedes crear una serie temporal de resolución de 1 segundo a partir de una serie temporal de puntos de interrupción.

Comments are closed.