Excel VBA DO循环扫描date范围并填写缺失的date

我有一个有大约20,000行数据的工作表。 每行在C列中都有一个交易date。每个工作表将只包含上个月的数据。 我想要发生的事情是有一个循环遍历每个date,并确保没有缺失的date,如果有一个缺less的date,我需要循环插入缺失的date到一个新的行。 我已经发现这个在线,并试图将其定制到我的工作表,但不能得到它的工作:

Dim i As Long: i = 1 'Adds missing dates as new rows Do If Cells(i + 1, "C") > Cells(i, "C") + 1 Then Rows(i + 1).Insert xlShiftDown Cells(i + 1, "C") = Cells(i, "C") + 1 End If i = i + 1 Loop Until Cells(i + 1, "C") = "" 

我有一堆不同的macros将数据格式化成表格,然后按交易date进行sorting。 我不确定桌子是否会造成另外一个问题,但我似乎无法使其工作。

任何提示,非常感谢!

从看起来像这样的数据开始:

在这里输入图像说明


运行这个代码循环遍历date底部并插入缺less的行。

 Sub insertMissingDate() Dim wks As Worksheet Set wks = Worksheets("Sheet1") Dim lastRow As Long lastRow = wks.Range("C2").End(xlDown).Row 'Work bottom up since we are inserting new rows For i = lastRow To 3 Step -1 curcell = wks.Cells(i, 3).Value prevcell = wks.Cells(i - 1, 3).Value 'Using a loop here allows us to bridge a gap of multiple missing dates Do Until curcell - 1 = prevcell Or curcell = prevcell 'Insert new row wks.Rows(i).Insert xlShiftDown 'Insert missing date into new row curcell = wks.Cells(i + 1, 3) - 1 wks.Cells(i, 3).Value = curcell Loop Next i End Sub 

结果:

在这里输入图像说明

使用这个代码的任何人的一个注意 – 你必须有你的date格式化,以便在一个数字的月份,(即一月 – 例如“1/1/17”)你有一个零在本月前,使其两位数即01/1/17)。 代码将不会工作,除非你这样做。 在excel的主页上有一个“更多数据格式”的数据types,其中包括在一个数字月份之前的零。 感谢代码,它帮助我极大!