![如何在特定日期过去后为其添加 1 年?](https://linux22.com/image/1482933/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%89%B9%E5%AE%9A%E6%97%A5%E6%9C%9F%E8%BF%87%E5%8E%BB%E5%90%8E%E4%B8%BA%E5%85%B6%E6%B7%BB%E5%8A%A0%201%20%E5%B9%B4%EF%BC%9F.png)
我有一个 Excel 电子表格,其中列出了我们当前的订阅。其中一列是他们注册的日期,另一列是续订日期。目前,一旦续订日期过去并且新期限开始,我必须手动将续订日期更新为下一年。有没有方法/公式可以自动更改年份/增加 1 年?
):
基本订阅 - 签署日期 2014 年 1 月 11 日 - 续订日期 2016 年 1 月 11 日**
**希望将其更改为 2017 年 1 月 11 日
答案1
包括以下这些事件宏在工作表代码区域:
Private Sub Worksheet_Activate()
Dim N As Long, r As Range, rng As Range
Dim d As Date
N = Cells(Rows.Count, "G").End(xlUp).Row
Set rng = Range("G3:G" & N)
For Each r In rng
If IsDate(r.Value) Then
d = r.Value
If d < Date Then
r.Value = DateSerial(Year(d) + 1, Month(d), Day(d))
End If
End If
Next r
End Sub
每次激活工作表时,宏都会扫描列中的所有日期G从...开始G3如果日期为“过时”,则日期提前一年。
因为它是工作表代码,所以非常容易安装和自动使用:
- 右键单击 Excel 窗口底部附近的选项卡名称
- 选择查看代码-这将打开一个 VBE 窗口
- 粘贴内容并关闭 VBE 窗口
如果您有任何疑虑,请首先在试用工作表上尝试一下。
如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除宏:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
要了解有关事件宏(工作表代码)的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/event.htm
必须启用宏才能使其工作!
答案2
如果您不愿意(或者您遇到了需要)使用宏,其中一个公式似乎对我有用,这取决于您喜欢的精确行为......
如果您希望将日期从更改1/11/16
为1/11/17
1/11/15
(续约之日),然后对 G 列单元格使用此公式:
=(DATE(YEAR(F3)+FLOOR(YEARFRAC(F3,TODAY()),1),MONTH(F3),DAY(F3)))
如果您希望将日期从更改1/11/16
为1/11/17
1/12/15
(日期后续约日期),然后使用以下公式:
=(DATE(YEAR(F3)+FLOOR(YEARFRAC(F3+1,TODAY()),1),MONTH(F3),DAY(F3)))
公式的这一FLOOR(YEARFRAC(F3,TODAY()),1)
部分确定了自签署日期以来的整年数(在您的示例中,该数字为两年)。然后,公式的其余部分将其添加到签署日期。作为可能的奖励,您还可以在另一列中使用公式的这一部分来计算并一目了然地显示他们已经订阅了多少年 - 也许是为了不时向长期订阅者发送感谢电子邮件甚至礼物... :-P
答案3
您可以尝试日期函数:
=IF(TODAY()>(DATE(YEAR(F3)+1,MONTH(F3),DAY(F3))),DATE(YEAR(F3)+1,MONTH(F3),DAY(F3)),"")
答案4
在单元格 G3 中使用公式=F3+365
,它将返回 F3 加上一年的日期。