如何比较vba中的时间

时间:2011-11-24 04:05:05

标签: excel vba excel-vba time compare

我想编写一个宏,比较单元格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 

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

两件事:

  1. 尝试将A1中的值更改为11/10/2011 10:11:36 PM 现在工作可能会出现区域设置不匹配
  2. 您已宣布date1date2但已分配两次至date1且从不 分配到date2

答案 2 :(得分:1)

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

你应该明白excel中的日期和时间用序列号表示,其中1等于一天,时间用小数或分数表示。

所有系统的日期都是从我们1月1日1900 = 1和1月2日1900 = 2的第0天开始,依此类推。

在excel工作表上,您可以使用today()检索当前日期和时间。在vba上,你使用Now。今天的日期,在“0”或“常规”数字格式中应显示以42 ...开头的数字,表示自1900年1月1日以来的天数。

由于一天内有24小时,如果您希望参考1小时或凌晨1点,序列号中的分数或小数等于1/24。下午7:00 = 19/24

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

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

当你使用mod()将日期和时间除以1时,它将返回余数,即你日期的小数部分,即时间。

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

答案 3 :(得分:0)

 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

答案 4 :(得分:0)

不能简单地使用.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