MICROSOFT

EP01. “Compare Dates and Times 比较日期和时间”

首页 Microsoft 工具 Excel · VBA · Date and Time · EP01
约 4 分钟· #EP01#Excel#Date and Time
🔒 登录后可标记已读
  • 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:

  1. Compare Dates and Times