Excel未alignment的时间戳

将post

我有两个工作表(工作表1和工作表2)的Excel工作簿(.xlsx)。 工作表1有7列数据(每行约70k行),而工作表2只有5列约250-500行。 每张表的第一列包含数据以格式(yyyy-mm-dd_hh:mm:ss)收集时的时间戳。

差异在于表1中的数据具有间隔8秒的数据点。 但是,表2有零星的数据input。 可能有4个或5个条目发生在一个突发中(例如5秒的间隔),然后在另外几个小时内不会再有另一个条目。

我想要做的是重新组织Sheet 2,使时间戳与Sheet 1alignment。原因是当我在Sheet 1中绘制数据时,可视化看起来是合适的,因为数据是均匀分布的。 但是,我不能以相同的方式绘制第2页中的数据,因为数据点出现在零星的时间间隔。

我很喜欢C#,并考虑尝试创build一个程序,它将读取每个工作表的csv文件,并进行批处理…但即使在那里,我有点卡住什么是正确的程序。 有没有办法可以直接在Excel中处理? 任何的build议都受欢迎。

一点背景。 我在三张纸上testing了这个。 第一张纸有100个date,间隔为8​​秒。 第二张纸,我有5列300个数据点,第一列包含零星间隔的date。 我已经决定不要篡改第二张表,所以我的输出是在第三张表进行testing。

我们的逻辑是find比我们的目标date更小的最大值。 这样,我们在这个定位date和下一个date之间的8秒内。 然后,我们从第一张表中获取该值的行,然后在结果表中将该行用作相同的行号。 然后,我们将第二张纸上的值“转”到结果表中的正确的行上。

运行时在我的机器上可以忽略不计。 希望这也能适合你。 请在您的工作簿副本上进行testing。

Sub Align() Dim RefWS As Worksheet, ListWS As Worksheet, ResWS As Worksheet Dim RngOne As Range, RngTwo As Range Dim RngVal As Variant, Elem As Variant Dim LRowOne As Long, LRowTwo As Long, LRowThree As Long Dim LocRow As Long, RowCt As Long Dim PopRng As Range, StartRow As Long With ThisWorkbook Set RefWS = .Sheets("Sheet1") 'Modify as necessary. Set ListWS = .Sheets("Sheet2") 'Modify as necessary. Set ResWS = .Sheets("Sheet3") 'Modify as necessary. End With LRowOne = RefWS.Range("A" & Rows.Count).End(xlUp).Row LRowTwo = ListWS.Range("A" & Rows.Count).End(xlUp).Row 'Make sure to change based on whether you have headers or not. Set RngOne = RefWS.Range("A1:A" & LRowOne) 'Modify as necessary. Set RngTwo = ListWS.Range("A1:A" & LRowTwo) 'Modify as necessary. RngVal = RngTwo.Value 'Change RowCt to 2 if you have headers. RowCt = 1 For Each Elem In RngVal LocRow = Application.Match(CDbl(Elem), RngOne, 1) ResWS.Range("A" & LocRow & ":E" & LocRow).Value = ListWS.Range("A" & RowCt & ":E" & RowCt).Value RowCt = RowCt + 1 Next Elem 'Autopopulate. With ResWS LRowThree = .Range("A" & Rows.Count).End(xlUp).Row Do StartRow = .Range("A" & LRowThree).End(xlUp).Row If StartRow > 1 Then StartRow = StartRow + 1 Set PopRng = .Range("A" & StartRow & ":E" & LRowThree) .Range("A" & LRowThree & ":E" & LRowThree).Copy PopRng.PasteSpecial xlPasteValues LRowThree = StartRow - 1 Loop Until StartRow = 1 End With Application.CutCopyMode = False End Sub 

同样重要的是要注意,如果两个值匹配,它将得到最新的值而不是最接近的值。 首先让我知道你的数据运行后会发生什么。

编辑:代码更新为每个聊天。