Excel VBA DO循环扫描日期范围并填写缺少的日期

时间:2014-11-17 14:59:25

标签: excel date loops excel-vba excel-2010 vba

我有一个包含大约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") = ""

我有一堆不同的宏,它们将数据格式化为表格,然后按交易日期对其进行排序。我不确定该表是否会产生另一个问题,但我似乎无法让它工作。

非常感谢任何提示!

2 个答案:

答案 0 :(得分:1)

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

enter image description here


运行此代码以自下而上循环日期并插入缺失的行。

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

结果:

enter image description here

答案 1 :(得分:0)

使用此代码的任何人的注释 - 您必须将您的日期格式化,以便在单个数字月份(即1月 - 例如“1/1/17”)中,您在月前有零,使其成为两位数(即01/1/17)。除非您这样做,否则代码将无法运行。在excel主页上的“更多数据格式”下有一种数据类型,它将在单个数字月前包含零。感谢您的代码,这对我帮助很大!