我有一个包含大约20,000行数据的工作表。每行在C列中都有一个交易日期。每个工作表只包含上个月的数据。我想要发生的是,每个日期都有一个循环,并确保没有缺少日期,如果有一个缺少的日期,我需要循环将缺少的日期插入新行。我在网上发现了这个,并试图将其自定义到我的工作表但无法让它工作:
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") = ""
我有一堆不同的宏,它们将数据格式化为表格,然后按交易日期对其进行排序。我不确定该表是否会产生另一个问题,但我似乎无法让它工作。
非常感谢任何提示!
答案 0 :(得分:1)
从看起来像这样的数据开始:
运行此代码以自下而上循环日期并插入缺失的行。
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
结果:
答案 1 :(得分:0)
使用此代码的任何人的注释 - 您必须将您的日期格式化,以便在单个数字月份(即1月 - 例如“1/1/17”)中,您在月前有零,使其成为两位数(即01/1/17)。除非您这样做,否则代码将无法运行。在excel主页上的“更多数据格式”下有一种数据类型,它将在单个数字月前包含零。感谢您的代码,这对我帮助很大!