首页 > 解决方案 > 如何使用VBA计算时间差?

问题描述

我是VBA的初学者。我只需要在 VBA 中解决我的问题。谢谢。

以下是我需要做的任务

  1. 从表中选择一个“ID”和一个“课程”。在下表中,我提到了一些 ID 和课程,但是我的项目有多个 ID 和课程。我无法继续为所有案例输入 ID 和课程名称。有没有聪明的方法来做到这一点?

  2. 对于特定 ID、特定课程和特定日期,我需要计算下表中针对特定“事件”给出的两行之间的时间差。前两行的时间差给出了“阅读”所花费的时间,第 2 行和第 3 行之间的差给出了“写作”所花费的时间,第 3 行和第 4 行之间的差给出了“写作”所花费的时间,依此类推.

任何帮助将不胜感激。数据格式在下面的链接中

在此处输入图像描述

标签: excelvba

解决方案


您可以修改代码并尝试:

Option Explicit

Sub test()

    Dim strID As String, strCourse As String, strEvent As String
    Dim DateTime1 As Date, DateTime2 As Date
    Dim LastRow As Long, i As Long, y As Long

    With ThisWorkbook.Worksheets("Sheet1")

        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

        For i = 2 To LastRow

            strID = .Range("A" & i).Value
            strCourse = .Range("B" & i).Value
            DateTime1 = CDate(.Range("C" & i).Value) & " " & CDate(.Range("D" & i).Value)
            strEvent = .Range("E" & i).Value

            For y = 2 To LastRow

                If y <> i Then

                    If .Range("A" & y).Value = strID And .Range("B" & y).Value = strCourse And .Range("E" & y).Value = strEvent And .Range("F" & i).Value = "" And .Range("F" & y).Value = "" Then
                        DateTime2 = CDate(.Range("C" & y).Value) & " " & CDate(.Range("D" & y).Value)
                         .Range("F" & i).Value = Abs(DateDiff("h", DateTime2, DateTime1))
                    End If

                End If

            Next y

        Next i

    End With

End Sub

推荐阅读