首页 > 解决方案 > 如何在 Excel 中处理午夜的日期

问题描述

我有以下结构的数据:

日期 时间
01-01-2021 0800-1600
01-01-2021 2000-0400

每条线都是一名员工和他们的工作时间。这意味着第一线员工 #1 遇到 0800 并在同一天于 1600 离开。然而,员工 #2 遇到 2000 并在第二天离开 0400。

我的问题是我正在工作显示没有。在特定时间在场的员工人数。第一个员工很容易做到,因为会议和离开是同一天。然而,第二个问题有点多,因为在我当前的设置中,员工在同一天工作。

数据会自动更新到 excel 中,所以我不想进行任何手动调整。为了正确显示它,从我的角度来看,我需要在第二天的小时数上加上一行。我可以用 VBA 做这个,但我不确定这是否是最简单和最好的方法。

那么关于如何处理这样的问题有什么想法吗?

谢谢!

标签: excelvbatime

解决方案


创建一个用户定义函数 (UDF) 以从 col A 和 B 中的值返回 cols C 和 D 中的日期时间。将 UDF 代码放入模块中。例如,公式 inC2将是=date_time($A2,$B2,0)和 inD2 =date_time($A2,$B2,1)

例子

Option Explicit

' i=0 for start , i=1 for end
Function date_time(dt As Date, hrs As String, i As Integer) As Date
    Dim ar
    ar = Split(hrs, "-")
    If ar(1) < ar(0) Then ar(1) = ar(1) + 2400 ' next day
    ' add minutes
    date_time = DateAdd("n", Left(ar(i), 2) * 60 + Right(ar(i), 2), dt)
End Function

推荐阅读