如何用VBA在Excel中计算差分格式的时差

如何用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

我有两列不同格式的日期

如您所见,一列为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 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值了解的那样),因此主要问题是将其转换为日期。为什么要尝试重新创建现有的函数?