excel 从1900年之前的日期计算天数

6jjcrrmo  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(282)

要计算从1900年以前的日期算起的天数,我必须用这个公式加上1000年

=IF(ISTEXT(M3),DATEVALUE(LEFT(M3,LEN(M3)-4)&RIGHT(M3,4)+1000),EDATE(M3,12000))

字符串
由于这个公式增加了1000年,那么我必须从结果中减去1000才能得到最终正确的结果
例如:1892年1月12日-> 2892年1月12日(增加1000年)
然后从这个新的日期(2892年1月12日)开始,我可以使用添加任何天数来获得另一个新的日期,让我说我想添加5626天,然后我得到2907年6月9日,然后为了得到正确的结果,我必须从1907年6月9日减去1000年
然而,让我们再举一个例子,我添加了更少的天数,例如2813天到2892年1月12日,然后我得到了2899年9月25日。为了得到正确的结果,我需要扣除1000年,Excel给出给予3799年9月25日。这是不正确的,正确的是1899年9月25日。那么我如何显示这个正确的结果呢?

vlurs2pr

vlurs2pr1#

创建一个向日期中添加天数的函数。

Public Function DateAddDays(ByVal inputDate As Date, ByVal numberOfDays As Long) As Date
    DateAddDays = DateAdd("d", numberOfDays, inputDate)
End Function

字符串
在电子表格中,其中InputDate是包含1/12/1892(即Jan 12,1892)的命名单元格
我使用的是英语(澳大利亚),所以日期显示默认为dd/mm/yyyy,可能会根据所用的区域性或单元格格式等而有所不同。
例如,单元格中的公式,其中B2包含要添加的天数。= DateAddDays(InputDate,B2),即= DateAddDays(1/12/1892,5626)= 28/04/1908

Add Days     Output
5626         28/04/1908
2813         15/08/1900


以任何其他Date格式格式化1900年之前的日期时出现问题。使用VBA-DotNetLib可能会执行下列操作。若要使用,需要注册类型库并导入VBA类。**这是一项正在进行的工作。**甚至可以使用不同的区域性,通过传入IFormatProvider的VBAString.Format2函数以各种语言显示。

Public Function FormatDate(ByVal inputDate As Date) As String
    FormatDate = VBAString.Format("{0:dddd, MMMM d, yyyy}", inputDate)
End Function


eg.

Input       Output
12/1/1892   Tuesday, January 12, 1892


使用下面的DotNetLib Create函数

Public Function FormatDateAddDays(ByVal inputDate As Date, ByVal numberOfDays As Long) As String
    Dim date1 As DotNetLib.DateTime
    Set date1 = DateTime.FromOADate(inputDate)
    Dim result As DotNetLib.DateTime
    Set result = date1.AddDays(numberOfDays)
    FormatDateAddDays = VBAString.Format("{0:dddd, MMMM d, yyyy}", result)
End Function


单元格=格式日期添加天数($A$3,B3),其中$A$3是输入日期,B3是5626

Input Date  Add Days    Output
12/1/1792   5626        Tuesday, June 9, 1807
            2813        Wednesday, September 25, 1799


或者可以在VBA中开发您自己的自定义日期格式,分解各种日期组件,即需要获得星期几、月份名称等。

相关问题