我在Excel中有一张表,它实际上是一种包含其中人员的数据库。因为我需要有他们的实时年龄,我有一个计算这个的公式。
=IF(I2="";"";IF(MONTH(DATE())>MONTH(I2),YEAR(DATE())-YEAR(I2),
IF(AND(MONTH(DATE())=MONTH(I2),DAY(DATE())>=DAY(I2)),
YEAR(DATE())-YEAR(I2),(YEAR(DATE())-YEAR(I2))-1)))
您可以想象这是一个相对较慢的代码。因为每天都会添加多个人,所以我需要为完整的专栏提供此代码。这是如此密集,以至于我的工作电脑上的擅长崩溃(没有多少内存),我在该表上所做的一切都变慢了。
解决这个问题的最佳方法是什么?我认为每次不进行DATE()
计算可能会有所帮助,所以我把它放在另一个单元格中并且每次引用该单元格,但它只会变得更糟。
修改
我的表单格式:
I2-I10:08-01-1994(出生日期)P2-P1048576:公式(将返回22)
列A包含具有文本/字符串数据值的单元格,列B具有默认值
尽管它是荷兰语,但希望这会让它更加清晰:
答案 0 :(得分:0)
试试这个:
=DATEDIF(A1,TODAY(),"Y")
这将返回单元格A1
中指定日期的年数。 。 =DATEDIF(A1,TODAY(),"M")
这将返回单元格A1
中指定日期的月数。 =DATEDIF(A1,TODAY(),"D")
这将返回单元格A1
中指定日期的天数。 希望得到这个帮助。
答案 1 :(得分:0)
也许有些VBA会在这种情况下工作。测试一下,删除P列中的公式,然后运行此代码,它遍历第一列并将差异放在P列中
Sub DteDif()
Dim Rws As Long, rng As Range, c As Range
Dim d As Date
d = Now
Rws = Cells(Rows.Count, "I").End(xlUp).Row
Set rng = Range("I2:I" & Rws)
Application.ScreenUpdating = 0
For Each c In rng.Cells
c.Offset(, 7) = Int(DateDiff("d", c, d) / 365.25)
Next c
End Sub
答案 2 :(得分:0)
似乎以下是最简单,快速和精确的解决方案。如果你不这么认为,我会很高兴听到它。
Private Sub Workbook_Open()
i = 2
While Sheets("shtData").Cells(i, 1) <> ""
If Month(Date) > Month(CDate(Sheets("shtData").Cells(i, kolGD))) Then
Sheets("shtData").Cells(i, kolLT) = Year(Date) - Year(CDate(Sheets("shtData").Cells(i, kolGD)))
Else
If Month(Date) = Month(CDate(Sheets("shtData").Cells(i, kolGD))) And Day(Date) >= Day(CDate(Sheets("shtData").Cells(i, kolGD))) Then
Sheets("shtData").Cells(i, kolLT) = Year(Date) - Year(CDate(Sheets("shtData").Cells(i, kolGD)))
Else
Sheets("shtData").Cells(i, kolLT) = Year(Date) - Year(CDate(Sheets("shtData").Cells(i, kolGD))) - 1
End If
End If
i = i + 1
Wend
End Sub