如何将两个date的差异格式化为VBA中的天数,小时数和分钟数?

我有一个与这个问题有关的问题 。 在这篇文章中,提出了基于公式的build议。 不幸的是,那些不会为我所需要的:

我有一个数据透视表,包含分数天,即。 35.39375天或28.32361111天。 我希望分别将这些数字格式化为35日09:27和28日07:46(#日,时,分)。 同样,我想同样格式化他们的行和列总计。 我需要在VBA中完成。

将数据透视表单元格格式设置为.NumberFormat =“d hh:mm”不起作用,因为天数将被截断,因为它们通常会超过31天。

我正在使用EXCEL 2007。

附录:

我感谢所有提出基于配方的方法的人。 当在数据透视表中指定VBA中的数字格式时,这些不起作用。 例如,下面的代码是错误的,因为它会导致超过31的天数被截断。 .NumberFormat规范的性质不允许基于公式的格式(至less,我看不到):

With ActiveSheet.PivotTables("Durations") . . . .AddDataField .PivotFields("Duration"), "Count of Duration", xlCount With .PivotFields("Count of Duration") .Caption = "Sum of Duration" .Function = xlSum .NumberFormat = "d hh:mm" <<=== This will cause the number of days to be truncated. End With . . . With 

Excel(和VBA)中的datetypes已经存储为天[分数天]。 所有你需要做的是格式化。

VBA:

 foo = 35.39375 Debug.Print Int(foo) & " " & Format$(foo - Int(foo), "hh:nn") 'Prints 35 09:27 

式:

 =CONCATENATE(INT(A1), TEXT(A1, " hh:mm"))