如何在特定日期过去后为其添加 1 年?

如何在特定日期过去后为其添加 1 年?

我有一个 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如果日期为“过时”,则日期提前一年。

因为它是工作表代码,所以非常容易安装和自动使用:

  1. 右键单击 Excel 窗口底部附近的选项卡名称
  2. 选择查看代码-这将打开一个 VBE 窗口
  3. 粘贴内容并关闭 VBE 窗口

如果您有任何疑虑,请首先在试用工作表上尝试一下。

如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除宏:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 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/161/11/171/11/15续约之日),然后对 G 列单元格使用此公式:

=(DATE(YEAR(F3)+FLOOR(YEARFRAC(F3,TODAY()),1),MONTH(F3),DAY(F3)))

如果您希望将日期从更改1/11/161/11/171/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 加上一年的日期。

相关内容