1

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

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

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

据我所知,小数点甚至与时间值无关。错了,它只是表示 24 小时周期的时间值。所以它是相关的。但还是。

4

3 回答 3

7

ws.Range("C13")等效于ws.Range("C13").Value从该单元格返回基础数据。

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

于 2013-03-12T23:19:08.440 回答
2

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

日期存储为浮点值,其中整个部分表示自12/30/1899 00:00.00(date 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
于 2013-03-12T22:39:38.027 回答
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)
于 2015-01-30T22:57:08.680 回答