如何用VBA在Excel中计算差分格式的时差
我有两列不同格式的日期 如您所见,一列为dd/mm/yyyy格式,另一列为mm/dd/yyyy格式 我想找出两者的时差。 此外,一列为日期格式,另一列为常规格式 我在VB中编写了一个函数来计算差异,如下所示:如何用VBA在Excel中计算差分格式的时差,excel,vba,Excel,Vba,我有两列不同格式的日期 如您所见,一列为dd/mm/yyyy格式,另一列为mm/dd/yyyy格式 我想找出两者的时差。 此外,一列为日期格式,另一列为常规格式 我在VB中编写了一个函数来计算差异,如下所示: Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long TestDates = DateDiff("d", pDate1, pDate2) End Function Function ca
Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
TestDates = DateDiff("d", pDate1, pDate2)
End Function
Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
caclulateDifference = DateDiff("d", pDate1, pDate2)
End Function
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = DateDiff("s", pDate1, pDate2)
End Function
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = Abs(DateDiff("s", pDate1, pDate2))
End Function
我在Excel中使用=caclulateDifference(b2,a2)来调用它
但是,
pDate1显示为10/15/19 11:38:38 AM,但pDate2显示为10/19/15 9:09:23 AM,然后差值显示为0
我要的是日、时、分的不同。
我做错了什么?您得到的是0,因为这些值之间有0天的间隔,而且,您从未为函数指定一个值,以返回除
Long
的默认值以外的任何值
试着这样做:
Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
TestDates = DateDiff("d", pDate1, pDate2)
End Function
Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
caclulateDifference = DateDiff("d", pDate1, pDate2)
End Function
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = DateDiff("s", pDate1, pDate2)
End Function
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = Abs(DateDiff("s", pDate1, pDate2))
End Function
您仍然会得到0,但在本例中,这是您应该得到的结果。将函数更改为此,然后查看调试窗口以查看日期格式是否正确:
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
Debug.Print pDate1
Debug.Print pDate2
caclulateDifference = DateDiff("d", pDate1, pDate2)
End Function
然后使用不同日期的日期值对其进行测试,以获得除0以外的其他值
现在,如果您希望它比您所说的天数更详细,则需要返回除Long
以外的值(值中可能也有毫秒),并在DateDiff
中使用不同的参数,如下所示:
Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
TestDates = DateDiff("d", pDate1, pDate2)
End Function
Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
caclulateDifference = DateDiff("d", pDate1, pDate2)
End Function
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = DateDiff("s", pDate1, pDate2)
End Function
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = Abs(DateDiff("s", pDate1, pDate2))
End Function
然后将秒数转换为天、小时、分钟和秒数
如果您不想让顺序变得重要,并且总是得到一个正数,那么也可以使用Abs
(绝对值)函数,如下所示:
Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
TestDates = DateDiff("d", pDate1, pDate2)
End Function
Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long
caclulateDifference = DateDiff("d", pDate1, pDate2)
End Function
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = DateDiff("s", pDate1, pDate2)
End Function
Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double
caclulateDifference = Abs(DateDiff("s", pDate1, pDate2))
End Function
如何获取小时和分钟的值,例如,对于上面的示例,返回的值应为2小时29分钟。我该怎么回复呢?我更新了答案。玩一下。它需要格式化才能获得多个值,您可以在函数内部或外部执行这些操作。我得到-8965秒。这不对吗?你希望总是得到一个正数吗?它取决于您指定值的顺序,或者您可以使用
Abs
(我将更新答案)输入值不是具有不同格式的日期,而是字符串(至少是第一个-正如您可以通过查看pDate2值了解的那样),因此主要问题是将其转换为日期。为什么要尝试重新创建现有的函数?