【问题标题】:Fill in missing dates填写缺少的日期
【发布时间】:2015-12-28 08:50:26
【问题描述】:

我正在处理大数据集,手动填写缺失的日期是一项非常繁琐的工作。我想通过应用可以帮助我填写所有这些缺失日期的 Excel 公式或 VBA 代码来自动执行此操作。

请看下面的数据。

第一个表是我得到的输入,我希望第二个表作为我的输出。黄色单元格显示缺失的日期,应与上一行相同。

【问题讨论】:

    标签: vba excel date


    【解决方案1】:

    我会使用这个功能:

    Sub Fill_In_Missing_Dates()
        Dim rng As Range
        Dim cell As Range
        Set rng = ThisWorkbook.Sheets("Sheet1").Range("B2:B11")
        For Each cell In rng
            If cell.Value = vbNullString Then cell.Value = cell.Offset(-1).Value
        Next
    End Sub
    

    只需将Sheet1B2:B11 更改为您的实际工作表名称和单元格即可。

    【讨论】:

      【解决方案2】:

      只需要遍历日期列中的每个单元格。如果为空,则分配日期值;如果不为空,则更新 LastDate 变量。

      Sub FillInDates()
          Dim rg As Range
          Dim aCell As Range
          Dim LastDate As Date
      
          'set this to your date column
          Set rg = ActiveSheet.UsedRange.Columns(1).Offset(1, 0)
      
          For Each aCell In rg.Cells
              If IsEmpty(aCell) Then
                  aCell.Value = LastDate
              Else
                  LastDate = aCell.Value
              End If
          Next
      End Sub
      

      【讨论】:

        【解决方案3】:

        如果您不想使用 VBA 的替代方法:

        选择列,转到Home - Find & Select - Go to Special - 选择Blanks 并点击OK。您已选择所有空白单元格。现在输入引用活动单元格上方单元格的公式(= 符号和up arrow),然后点击ctrl+enter 将其粘贴到所有选定的单元格中。

        您可能想在之后复制粘贴整个列的值。

        在大范围(例如超过 100000 个单元格)上,这种方法会变得很慢,所以我也推荐大表上的 VBA 解决方案。


        快速基准测试:ZygD 和 D_Bester 的解决方案都在 130000 行上运行了不到 2 秒。如果我在同一组单元格上运行它们,它们之间没有可测量的速度差异。另一方面,使用 specialcells(xlcelltypeblanks) 需要 25 秒才能找到空单元格。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-24
          • 2018-10-05
          • 2019-06-26
          • 1970-01-01
          • 2019-12-31
          • 1970-01-01
          相关资源
          最近更新 更多