我在Excel的一列中有一系列连续日期(1/01 / 2012,2 / 01 / 2012,3 / 01/2012等)。我希望Excel检查当前日期,并将该日期添加到范围的底部(如果还没有)。我只希望每天发生一次,这样就没有多余的条目。
例如:
如果列表于2013年6月2日结束,并且我在2013年6月2日打开工作簿,则不会发生任何事情。但是,如果我在第二天(2013年6月3日)再次打开工作簿,那么该日期将自动添加到列表底部。
我还需要将两个公式复制到该行的下两个单元格中。如果为A20
生成了日期,则公式将位于B20
和C20
上。对于每个新的日期条目,年/月/日的单元格引用需要递增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
但是,公式中的那些单元格引用需要在每次发生新列时递增一次,并且我不确定如何实现它。
答案 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