Excel VBA阻止VBA将时间值转换为小数

时间:2013-03-12 22:28:50

标签: datetime excel-vba vba excel

我正在尝试从工作簿中提取数据,因为我将工作簿设置错误但我想保留数据。所以我必须浏览每个工作表并提取我需要的特定数据位。 (重复任务=救援的vba代码)

我已经完成了,但我有一个讨厌的小问题。

我正在使用ws.Range(“C13”)来提取我需要的每个单元格。这是一个时间值如10:00或22:13的单元格。当我调试该值时,我得到一个小数。为什么?如何防止它将我的“10:30”转换为“0.4375”

据我所知,小数甚至与时间值无关。 错误它只是作为24小时时段表示的时间值。所以它是相关的。但仍然。

3 个答案:

答案 0 :(得分:7)

ws.Range("C13")相当于ws.Range("C13").Value,它返回该单元格中的基础数据。

如果您使用ws.Range("C13").Text,您将从单元格中获取显示的文本。如果您为该单元格设置了特定的日期/时间格式,则调用ws.Range("C13").Text应该返回该特定格式的文本

答案 1 :(得分:2)

时间值是正确的;这是Excel在内部存储日期和时间值的方式。

日期存储为浮点值,其中整个部分表示自12/30/1899 00:00.00(日期0.0)以来的天数,小数部分表示单日的小数部分(例如, 408875.5代表11/28/2011 12:00:00 PM)。

以下是一些您可能会觉得有用的转化因素:

Decimal value    Time Value    Calculation 
=============    ==========    ===========
0.00094444444    12:01:00 AM   1.0 / 24 / 60 (1 day/24 hours/60 minutes per hour)
0.01041666666    12:15:00 AM   1.0 / 24 / 60 * 15
0.02083333333    12:30:00 AM   1.0 / 24 / 60 * 30
0.04166666666    01:00:00 AM   1.0 / 24

答案 2 :(得分:0)

hours        = MOD(INT(0.tttttttt*24), 24)
minutes      = MOD(INT(0.tttttttt*24*60), 60)
seconds      = MOD(INT(0.tttttttt*24*60*60), 60)
milliseconds = MOD(INT(0.tttttttt*24*60*60*1000), 1000)