vba编码识别负数然后执行方程

时间:2016-07-05 13:56:02

标签: excel-vba vba excel

我目前正在进行一项分析大量数据的硕士项目。我试图通过比较他们醒来的时间和他们睡着的时间来计算参与者睡着的时间,目前我只是把他们醒来的时间和他们睡着的时间拿走了,这对所有人来说都是有效的。 450左右的参与者。我已经解决了问题是,参与者在凌晨2点入睡并在早上6点醒来,这会产生一个负数,而excel会计算出额外的一天,说参与者睡了30个小时。

我已经解决了我有效地需要一段代码,如果x是负数,那么1440值为x的列M

我目前的代码是:

Sub AlterSleep()
    Sleep=columms(13).Select 
    If Sleep < 0 Then
        sleep 1440-sleep 
    End If
End Sub

2 个答案:

答案 0 :(得分:0)

如果您可以安全地假设睡眠持续时间总是少于24小时,您可以像这样计算:
duration = ((awakening_time - sleeping_time) + 1440) modulus 1440

也就是说,如果公式增加24小时而不需要它,则可以通过取模数来校正。
由于这是一个非常简单的公式,它可以在工作表中作为公式实现,使用VBA只是过度杀伤。

答案 1 :(得分:0)

使用DateDiff("n")计算两次之间的分钟数,ABS()始终返回正数。

  

TimeAsleep(#6:00:00 AM#,#02:00:00 AM#)= 240

     

TimeAsleep(#6:00:00 AM#,#02:00:00 AM#)= 240

Function TimeAsleep(TimeWokeUp As Date, TimeFallenToAsleep As Date) As Integer
    Dim result As Integer
    TimeWokeUp = TimeValue(TimeWokeUp)
    TimeFallenToAsleep = TimeValue(TimeFallenToAsleep)
    result = DateDiff("n", TimeWokeUp, TimeFallenToAsleep)
    TimeAsleep = Abs(result)
End Function