如何比较vba中的时间

我想写一个macros,比较单元格A1和B1中可用的两次

我试图使用下面的代码,但它给了我"type dismatch"date1 = TimeValue(Range("A1"))

例如,单元格A1的值就像这样11/18/2011 10:11:36 PM

 dim date1 as date dim date2 as date date1 = TimeValue(Range("A1")) date1 = TimeValue(Range("B1")) if date1 > date2 then 'do something else 'do something else end if 

你需要使用Range("A1").Value

两件事情:

  1. 尝试更改A1中的值到11/10/2011 10:11:36 PM如果事情现在工作,您可能有一个区域设置不匹配
  2. 你已经声明了date1date2但是给date1分配了两次,从来没有分配给date2

使用application.worksheetfunction.mod(date值,1)

你应该明白,Excel中的date和时间是由一个序列号表示的,其中1表示一天,时间以小数或分数表示。

所有的系统都以从1900年1月1日= 1,1900年1月2日= 2的第零日开始,依此类推。

在excel工作表上,您使用today()来检索当前date和时间。 在vba上,您使用Now来代替。 今天的date,在“0”或“一般”数字格式应显示一个数字,以42 …开始,这代表1900年1月1日以来的天数。

由于一天内有24小时,如果你想参考1小时或1:00 AM,序列号中的小数或小数等于1/24。 7:00 PM = 19/24

mod()是一个公式或函数,将返回除法的其余部分。 请记住,时间是由小数表示,你不需要实际的整数。

您可以使用“application.worksheetfunction”在vba中使用mod()公式。 之前。

当使用mod()将date和时间分为1时,它将返回余数,即date的小数部分(即时间)。

比较date值(“1:00 PM”)不等于CDate(“2015年5月8日1:00 PM”)

  sub compare_dates() dim date1 as date dim date2 as date dim str as string str = activesheet.range("A1").value 'str = "11/18/2011 10:11:36 PM" str = Left(str,Instr(str," ")-1) ' str = "11/18/2011" date1 = str ' assign it to date1 str = activesheet.range("B1").value ' in the same way b1 cell value str = left(str,instr(str," ")-1) date2 = str if date1 > date2 then ' do something end if end sub 

不能通过使用.Text而不是.Value来完成吗?

 Dim date1 As Date Dim date2 As Date Dim date3 As Date date1 = TimeValue(Range("A1").Text) date2 = TimeValue(Range("B1").Text) date3 = TimeValue(Range("C1").Text) If date3 >= date1 And date3 <= date2 Then 'Yes! Else 'No! End If