EP01. “Compare Dates and Times 比较日期和时间”
🔒 登录后可标记已读- Excel 内部把日期和时间都存成数字(从 1900 年 1 月 0 日算起的天数)
- 讲怎么用 VBA 比较日期跟今天、跟指定日期
- 也讲日期时间混在一起时,怎么用
Int()拆开日期部分和时间部分正确比较 - 前置知识:基本的 For 循环和 If 判断
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
跟今天比较
Dim i As Integer
For i = 1 To 5
If Cells(i, 1).Value = Date Then Cells(i, 1).Font.Color = vbRed
Next i
Date 这个关键字代表「今天」,跟每格的值相等就把字体标红。
跟指定日期比较
If Cells(i, 1).Value < DateValue("April 19, 2019") Then Cells(i, 1).Font.Color = vbRed
用 DateValue 把文字转成日期,再用 <、=、> 比较。
日期时间混在一起时,只比较日期
If Int(Cells(i, 1).Value) = Date Then Cells(i, 1).Font.Color = vbRed
日期时间数值里,整数部分是日期、小数部分是时间。用 Int() 去掉小数部分,只留日期,才能正确跟 Date 比较。
判断是不是上午
If (Cells(i, 1).Value - Int(Cells(i, 1).Value)) < 0.5 Then Cells(i, 1).Font.Color = vbRed
把原始值减去 Int() 取出的日期部分,剩下的就是当天的时间比例,小于 0.5(中午 12 点)代表是上午。
学完你会
- ✅ 知道 Excel 的日期时间本质是数字,整数部分是日期、小数部分是时间
- ✅ 用
Date关键字和DateValue把日期拿来跟单元格值比较 - ✅ 用
Int()把日期时间拆开,分别比较日期或时间部分
常见错误
- 单元格其实存的是「日期+时间」,却直接拿去跟
Date(只有日期)比较,因为多了时间的小数部分,永远不会相等 - 忘记
Int()是取「日期部分」,原值 - Int(原值)才是「时间部分」,两者用途搞混 - 用
DateValue转换文字日期时,日期格式写法跟系统地区设置不一致,转换出错误的日期
Sources
Blog / Website: