【问题标题】:How to extract difference in minutes between two datetimes vba如何提取两个日期时间vba之间的分钟差
【发布时间】:2018-09-27 14:21:22
【问题描述】:

我有一个用户表单,它会自动生成当前日期时间并将其放在一个单元格中(批处理结束)。稍后再次使用用户表单,它将重复该步骤,但将其放置在不同的单元格中(新批次的开始)。

我想以分钟为单位计算两个日期时间之间的时间差。当我从较晚的日期时间中减去早期的日期时间时,我现在使用的代码由于某种原因给了我奇怪的否定答案,因此某处肯定有错误。 (由于在午夜之后开始和结束批次,这些日期可能在同一天,也可能不在同一天)。

当我尝试仅使用单元格公式将两者相减(无代码)时,我得到的值不正确,为 0.05。

有谁知道我可以让 excel 正确识别这些日期时间并减去它们以产生分钟差异的方法?

If opt1.Value = True And Range("U40") = "" Then
    Range("U40") = Format(txt1, "dd-mmm-yyyy hh:mm")
    UserForm3.Hide
ElseIf opt1.Value = True And Range("U41") = "" Then
    Range("U41") = Format(txt1, "dd-mmm-yyyy hh:mm")
    UserForm3.Hide
ElseIf opt1.Value = True And Range("U42") = "" Then
    Range("U42") = Format(txt1, "dd-mmm-yyyy hh:mm")
    UserForm3.Hide
ElseIf opt2.Value = True And Range("W40") = "" Then
    Range("W40") = Format(txt1, "dd-mmm-yyyy hh:mm")
    UserForm3.Hide
ElseIf opt2.Value = True And Range("W41") = "" Then
    Range("W41") = Format(txt1, "dd-mmm-yyyy hh:mm")
    UserForm3.Hide
ElseIf opt2.Value = True And Range("W42") = "" Then
    Range("W42") = Format(txt1, "dd-mmm-yyyy hh:mm")
    UserForm3.Hide
End If

If Range("U42") > "" And Range("W42") > "" Then
    Range("Y42") = Range("W42") - Range("U42")
ElseIf Range("U41") > "" And Range("W41") > "" Then
    Range("Y41") = Range("W41") - Range("U41")
ElseIf Range("U40") > "" And Range("W40") > "" Then
    Range("Y40") = Range("W40") - Range("U40")
End If

【问题讨论】:

  • 较早的时间减去较晚的时间...
  • 抱歉,刚刚在问题中添加了更多信息。由于某种原因,减法无法正常工作。可能是因为它是自定义日期格式?
  • excel中的日期时间是正数的计数,当时间是分数并且日期是整数时。 0.05 ia 正确,是 24 小时的一小部分。

标签: vba excel


【解决方案1】:

Excel 中的时间存储为一天的一小部分。减法给你小数天,你需要乘以得到分钟:

(Time B - Time A) * 60 Minutes in an hour * 24 Hours in a day

=(B1-A1)*60*24

【讨论】:

    【解决方案2】:

    Range("Y42") = DateDiff("n", Range("U42"), Range("W42"))

    【讨论】:

      【解决方案3】:

      总是从较大的减去较小的。

      A1 中较晚的日期/时间和 B1 中较早的日期/时间,在 C1 中输入:

      =24*60*(A1-B1)
      

      分钟获得差异:

      使用 VBA:

      Sub datetime()
          Dim dt1 As Date, dt2 As Date
          dt1 = Range("A1").Value
          dt2 = Range("B1").Value
          MsgBox Int(24 * 60 * (dt1 - dt2))
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 2013-05-14
        • 2011-11-29
        • 2013-09-08
        相关资源
        最近更新 更多