【问题标题】:How to convert break point time series to 1 second resolution timeseries in Excel如何在 Excel 中将断点时间序列转换为 1 秒分辨率时间序列
【发布时间】:2022-01-04 09:34:34
【问题描述】:

我有一个断点时间序列(当监控值更改时,会创建一个新的时间戳),它是使用 1 秒的精度创建的(时间戳的形式为 yyyy:mm:dd:ss),我想更改将该时间序列转换为 1 秒分辨率的时间序列。

基本上这意味着在断点时间戳之间添加额外的行和时间戳,这些新的时间戳需要保存被监控实体的最后一个值。

示例 断点时间序列 Breakpoint

想要 1 秒 res 时间序列 1 second res

等等。我希望你能明白。

问题是我不知道如何着手解决这个问题,我一直无法从档案中找到那么多类似的案例。

解决这种困境的好方法是什么,以及如何将所描述的解决方案实现为 VBA 代码?

感谢任何帮助。

谢谢 BR 穆杰

编辑: 我创建了一个简短的脚本,可以添加缺失的行并将上面的值复制到这个新行。但是,我仍在努力解决断点时间序列中缺少超过 1 秒的情况。代码如下:

Option Explicit
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 ("Sorted")

End Sub

【问题讨论】:

    标签: excel vba time-series breakpoints


    【解决方案1】:

    试试这个

    Option Explicit
    

    子 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
    RowStep = LastRow
    Do While RowStep > 3
        If Not IsEmpty(Range("A" & RowStep)) Then
            If (CDate(Range("A" & RowStep)) - (CDate(Range("A" & RowStep - 1)) + S)) > 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
                RowStep = RowStep + 1
            End If
        End If
        RowStep = RowStep - 1
    Loop
    
    MsgBox ("Sorted")
    

    结束子

    【讨论】:

    • 感谢您的帮助!我自己也发布了一个解决方案,似乎方法或多或少相同。尚未测试您的版本,但快速浏览一下应该没问题!
    【解决方案2】:

    我自己也想出了一个解决方案!如果有人发现这个完全相同的问题,我会在这里发布。

    Option Explicit
    Sub BP_to_sec1()
    
    Dim wb As Workbook
    Set wb = ThisWorkbook
    Dim ws As Worksheet
    Set ws = wb.Sheets("Test")
    
    Dim LastRow As Integer
    Dim RowStep As Integer
    Dim FillRow As Integer
    
    Dim S As Double
    Dim SS As Double
    S = (1 / 86400)     ' 1 sec
    SS = (1.2 / 86400)  ' 1.2 sec dif
    
    Dim X As Integer
    
    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)) + SS)) Then
            X = ((Second((Range("A" & RowStep))) - (Second(Range("A" & RowStep - 1)))))
            Range("A" & RowStep).EntireRow.Offset(0).Resize(X - 1).Insert Shift:=xlDown
             If X > 0 Then
                For FillRow = RowStep To (RowStep + (X - 2)) Step 1
                    Range("A" & FillRow).Value = Range("A" & (FillRow - 1)).Value + S
                    Range("B" & FillRow, "AA" & FillRow).Value = Range("B" & (FillRow - 1), "AA" & (FillRow - 1)).Value
                Next
             End If
         End If
       End If
     Next
    
    MsgBox ("Sorted")
    
    End Sub
    

    作为评论,在此解决方案中,我使用的数据范围更广,一直到“AA”列,因此我进行了编辑以复制下面的所有数据,当然时间戳除外,它加了 1s .

    也非常感谢@h2so4 的回答,我还没有测试过,但似乎我们使用的是相同的元素。我的版本也有点乱……

    欢迎任何 cmets!

    感谢您的帮助! BR 穆杰

    【讨论】:

    • 我自己的代码中发现了一个问题。我尝试在两个数据点之间添加缺失的行数,然后填写缺失的信息,但似乎当我遇到这个问题时,代码在前一个数据点的时间为 xx:04:57 和下一个数据点的情况下中断有时间 xx:05:01,因为现在“秒”之间的差异是 -56。关于排序的任何线索?
    • 我将自己对此发表评论。解决方案是(像往常一样)放弃所有与时间相关的函数并使用 86400 将日期转换为秒,我在初始代码中替换了一些行,如下所示: X = (((Range("A" & RowStep).Value) * 86400 ) - ((Range("A" & RowStep - 1).Value) * 86400))
    猜你喜欢
    • 2021-09-29
    • 2018-06-17
    • 1970-01-01
    • 2020-06-11
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    相关资源
    最近更新 更多