【问题标题】:My Excel VBA DateDiff calculation is truncating answer. How do I get more precise answer?我的 Excel VBA DateDiff 计算截断了答案。如何获得更准确的答案?
【发布时间】:2021-09-24 00:14:59
【问题描述】:

我正在尝试以周为单位计算日期差异。我实际上想要一个最接近小数点后 10 位 (0.0) 的答案。计算正在截断或舍入我的结果。如何获得更准确的答案?代码如下

Option Explicit


Sub DateTesting()

Dim Date1 As Date

Dim Date2 As Date

Dim DaysDiffer As Long

Dim WeeksDiffer As Long



Date1 = "1/10/2021"

Date2 = "7/14/2021"


DaysDiffer = DateDiff("d", Date1, Date2)

MsgBox DaysDiffer               

'185 is the result


WeeksDiffer = DaysDiffer / 7        

' 185/7= 26.4285


MsgBox WeeksDiffer      

' 26 is the result

'  Why am I getting a truncated integer value for the calculation of Weeks???

End Sub

【问题讨论】:

  • 试试Dim WeeksDiffer As DoubleDouble data type
  • 因为日期变量包含日期和时间。小数点右边的数字代表时间。由于您将WeeksDiffer 定义为Long,它会舍入到最接近的整数/长整数值,删除其中的时间部分。
  • 另外,DateDiff 返回一个变体 (Long) - docs.microsoft.com/en-us/office/vba/language/reference/…
  • 取而代之的是获取秒数SecsDiffer = DateDiff("s", Date1, Date2),然后进行数学运算以获取该值的小数部分。
  • 请注意,"1/10/2021" 不是日期,而是字符串(文本)。如果将其放入Date 类型的变量中,Excel 会尝试将其转换为数字日期。 Excel 需要确定日期是mm/dd/yyyy 还是dd/mm/yyyy,它使用Windows 中设置的日期格式来执行此操作。这意味着不同系统上的结果可能不同。永远不要让 Excel 解释字符串并将它们转换为日期。我建议始终使用DateSerial(year, month, day) 创建一个真实的数字日期。

标签: excel vba datediff


【解决方案1】:

这里是如何获得您的四舍五入的小数周:

Sub DateTesting()

    Dim Date1       As Date
    Dim Date2       As Date

    Dim DaysDiffer  As Long
    Dim WeeksDiffer As Double

    Date1 = #1/10/2021#
    Date2 = #7/14/2021#

    DaysDiffer = DateDiff("d", Date1, Date2)

    MsgBox DaysDiffer               
    ' 185 is the result

    WeeksDiffer = DaysDiffer / 7        
    ' 26.4285714285714 is the result

    MsgBox Format(WeeksDiffer, "0.0")
    ' 26.4 is the rounded result

End Sub

有关各种日期处理,请参阅VBA.Date。

如需高精度舍入,请参阅VBA.Round。

【讨论】:

  • 非常感谢!将数据类型更改为 Double 效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2018-05-31
  • 1970-01-01
相关资源
最近更新 更多