如何每天自动在Excel中的日期列表底部添加日期

时间:2013-06-02 20:47:20

标签: excel excel-vba excel-2010 vba

我在Excel的一列中有一系列连续日期(1/01 / 2012,2 / 01 / 2012,3 / 01/2012等)。我希望Excel检查当前日期,并将该日期添加到范围的底部(如果还没有)。我只希望每天发生一次,这样就没有多余的条目。

例如:

如果列表于2013年6月2日结束,并且我在2013年6月2日打开工作簿,则不会发生任何事情。但是,如果我在第二天(2013年6月3日)再次打开工作簿,那么该日期将自动添加到列表底部。

我还需要将两个公式复制到该行的下两个单元格中。如果为A20生成了日期,则公式将位于B20C20上。对于每个新的日期条目,年/月/日的单元格引用需要递增1(如同一行)。

作为参考,第一个公式是:

=SUMIF('Sheet1'!A:A,DATE(YEAR(A1),MONTH(A1),DAY(A1)),'Sheet1'!C:C)` 

另一个公式相似,足以解决这个问题。

提前致谢。

编辑:

我找出了如何检查列表并添加新日期

Sub CheckDateAndEnter()
    If Sheet10.Cells(Rows.Count, 1).End(xlUp).Value <> Date Then
        Sheet10.Cells(Rows.Count, 1).End(xlUp)(2, 1) = Date
        Sheet10.Cells(Rows.Count, 1).End(xlUp)(1, 2) = "=SUMIF('Sheet1'!A:A,DATE(YEAR(A304),MONTH(A304),DAY(A304)),'Sheet1'!C:C)"
    End If
End Sub

但是,公式中的那些单元格引用需要在每次发生新列时递增一次,并且我不确定如何实现它。

1 个答案:

答案 0 :(得分:1)

如果您将此代码放入VBA编辑器中的“ThisWorkbook”模块中,并确保将文件安全地作为“启用宏的工作簿”,它应该可以正常工作。

这里对公式进行硬编码可能不是最好的方法,而且我使用R1C1表示法可以更清晰。

Private Sub Workbook_Open()
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("Sheet1") ' Reference to your worksheet
Dim Entry As Range: Set Entry = Sheet.Cells(Sheet.Rows.Count, 1).End(xlUp) ' The Last Populated Cell in Column A
If IsEmpty(Entry) = True Then ' Optional, Used to populate the first cell
    Entry.Value = Date
    Entry.Offset(ColumnOffset:=1).Formula = "=SUMIF('Sheet1'!A:A,DATE(YEAR(A" & Entry.Row & "),MONTH(A" & Entry.Row & "),DAY(A" & Entry.Row & ")),'Sheet1'!C:C)` "
    Exit Sub
End If
If Year(Entry) = Year(Date) Then
    If Month(Entry) = Month(Date) Then
        If Day(Entry) = Day(Date) Then
            Exit Sub ' Last Entry = Today, Do Nothing!
        End If
    End If
End If
Set Entry = Entry.Offset(RowOffset:=1) ' Last Entry != Today, Goto Next Row and create Entry.
Entry.Value = Date
Entry.Offset(ColumnOffset:=1).Formula = "=SUMIF('Sheet1'!A:A,DATE(YEAR(A" & Entry.Row & "),MONTH(A" & Entry.Row & "),DAY(A" & Entry.Row & ")),'Sheet1'!C:C)` "
End Sub