Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel到VBA的时间差视图_Excel_Vba - Fatal编程技术网

从Excel到VBA的时间差视图

从Excel到VBA的时间差视图,excel,vba,Excel,Vba,我无法获得一些活动从开始到结束的平均时间 我试过1K法,但结果不正确,每次我都有一天的负数。 这张图片能更好地解释(我的英语)。 在本例中,我的活动总和为480:52:56小时,在vba中,我有不同的结果,对于vba,日期为“19/01/1900 00:52:56”,类似于456:52:56小时 24小时减去 为什么会有这种差异?我怎样才能得到同样的结果呢 谢谢你的建议 日期存储为序列号,其中第一个有效日期的值为1。该值在excel中显示为01/01/1900,在VBA中显示为31/12/189

我无法获得一些活动从开始到结束的平均时间

我试过1K法,但结果不正确,每次我都有一天的负数。 这张图片能更好地解释(我的英语)。 在本例中,我的活动总和为480:52:56小时,在vba中,我有不同的结果,对于vba,日期为“19/01/1900 00:52:56”,类似于456:52:56小时 24小时减去 为什么会有这种差异?我怎样才能得到同样的结果呢

谢谢你的建议


日期存储为序列号,其中第一个有效日期的值为1。该值在excel中显示为
01/01/1900
,在VBA中显示为
31/12/1899
。在excel中,值60返回VBA中不存在的
29/02/1900
,因此从值61开始,所有值将在VBA和excel中返回相同的日期


/e:另外,最大值为2958465(31/12/9999),如果值高于该值,则返回的将是错误而不是有效日期

多亏了您的评论,我知道问题出在1900年3月1日的次要日期,因此我更改了选择:

Select [DataAttesa] as Data, avg(iif([totHours] > 1 and [totHours] < 61, dateadd("d",-1,CDate([totHours])) , [totHours])) as nr FROM [db_In$] Where TypeTrasp  = "AOG" group by [DataAttesa] Order by [DataAttesa]asc
选择[DataAttesa]作为数据,平均值(iif([totHours]>1和[totHours]<61,dateadd([d],-1,CDate([totHours]),[totHours])作为[db_In$]中的nr,其中TypeTrasp=“AOG”根据[DataAttesa]订单按[DataAttesa]asc分组
现在,当我将recordset.results放在excel上时,值是正确的。
非常感谢

我无法提供答案,但如果我在即时窗口中输入
?格式(0,“dd/mm/yyyy”)
,它将给出
30/12/1899
。在Excel单元格中,
=文本(0,“dd/mm/yyyy”)
给出
00/01/1900
。这两个值之间相差1天,跳过1899年12月31日。Excel和VBA的日期起点不同。[我知道Excel中包括1900年2月29日,但该日期不存在,但在所讨论的日期范围之后。]我们通常不会注意到这种差异,因为我们通常处理日期差异。但是,如果您继续以小时为单位获取差异,它应该会给你同样的结果。@AndyG你有关于这种效果的任何资源或进一步的信息/文档吗?事实上,我第一次听说公式和VBA之间有这种区别。@Pᴇʜ有一些信息,但它没有清楚地详细说明Excel和VBA的起始位置之间的区别。@AndyG Thank's,实际上它确实解释了这个问题。该公式的计算方法与Lotus完全相同(包括Lotus的错误),但在VBA中,Microsoft正确地实现了该公式,并且1900-02-29不存在。为了使VBA尽可能与公式兼容(对于最近和未来的日期),他们显然决定移动VBA序列日期值的开头,因此只有1900-01-01和1900-02-29之间的日期在序列值中表现不同(可能是不太糟糕的)。实际上我可以证实这一点。
1900-03-01
之前的所有日期都不会返回相同的序列值(与公式相比使用VBA),因此必须非常小心地处理。