Difference between DateValue and CDate in VBA

excel, vba

Solution

`DateValue` will return only the date. `CDate` will preserve the date and time:

? DateValue("2014-07-24 15:43:06")
24/07/2014

? CDate("2014-07-24 15:43:06")
24/07/2014 15:43:06 

Similarly you can use `TimeValue` to return only the time portion:

? TimeValue("2014-07-24 15:43:06")
15:43:06 

? TimeValue("2014-07-24 15:43:06") > TimeSerial(12, 0, 0)
True

Also, as guitarthrower says, `DateValue` (and `TimeValue`) will only accept `String` parameters, while `CDate` can handle numbers as well. To emulate these functions for numeric types, use `CDate(Int(num))` and `CDate(num - Int(num))`.

Problem

I am new to VBA and I am working on a module to read in data from a spreadsheet and calculate values based on dates from the spreadsheet. I read in the variables as a String and then am currently changing the values to a Date using CDate. However I just ran across DateValue and I was wondering what the difference between the two functions were and which one is the better one to use.

Original source