归因于另一个值w / VBA的值? Excel 2010

时间:2017-12-07 13:08:52

标签: excel vba date time excel-2010

首先,抱歉,如果它已经存在,但我找不到英文单词来快速描述我的问题,因此我不知道如何搜索它。如果您只需要问题,请跳至第三段。

我正在使用Excel制作一份关于我工作时间的完整文件(到达,结束,如果我已经迟到,我迟到多久,加班等等)。 我正在使用VBA来完成这项任务。

我的工作场所将所有内容都缩短为四分之一小时,这意味着如果你迟到一分钟,你将失去15分钟。如果你加班14分钟,它将不会被视为加班。如果我在07:45指出(我使用24H格式,而不是AM / PM)我很好。如果我在07:46这样做,它将被计为08:00。与16:14相同,它将显示为16:00(详细信息显示在用于工资的更正表格上,它将以这种方式显示)。如果我在16:15这样做,我已经确认了15分钟的加班时间。

因此,虽然我可以做一些解决方法,但我真正想到的是shitcode。我想知道一个(干净)的方法:我希望我输入的每个时间戳都会减少四分之一小时(例如,我希望17:12出现作为17:00或08:57为08:45)。

感谢您的帮助,如果您对我所说的内容不理解或怀疑,可能是因为我解释它的方式,请询问所需的一切:)

更新01:值确实是由Excel处理的时间,而不是看起来像时间戳的字符串。

更新02:@FunThomas用TimeSerial解决 - 命令和一些解释。谢谢,我希望这可以为将来的参考提供帮助,但是我没有为这个问题写出更好的标题。

1 个答案:

答案 0 :(得分:0)

假设您的数据确实是时间(而不是看起来像时间的字符串)并且存储在Cell A1中,您可以使用如下公式:

=TIME(HOUR(A1), INT(MINUTE(A1)/15) * 15, 0)

time - 命令得到三个参数(小时,分钟,秒) 小时部分很简单 对于分钟,我们将整数除以15(得到0..3的值)并将其乘以15(得到0,15,30或45)。
第二个只是设置为0。

<强>更新: 作为VBA功能:

Function roundTime(t As Date) as date
    roundTime = TimeSerial(Hour(t), Int(Minute(t) / 15) * 15, 0)
End Function