2013-06-07 3 views
0

Мне нужно создать функцию Excel, которая дает время (время входа и время выхода), оно вычисляет время (hh: mm) между этими двумя, например, если записи сотрудника в 23: 00 (11 вечера) и выйдет в 07:00 (7 часов), он должен написать 8:00 в ячейке. Причина, по которой я не использую вычитание по времени, объясняется случаями, подобными тем, которые были в предыдущем примере, так как это даст и ошибка (7 утра ниже 23:00). До сих пор, я написал следующий код:Разница функций Excel между двумя датами

Function DIFERENCAHORASMINUTOS(ByVal EntryTime As Date, ByVal ExitTime As Date) 
Dim hexit, hentry, mexit, mentry, dminutes, dhours As Integer 
hexit = Int(Hour(ExitTime)) 
hentry = Int(Hour(EntryTime)) 
mentry = Int(Minute(EntryTime)) 
mexit = Int(Minute(ExitTime)) 
If ExitTime < EntryTime Then 
    If mexit < mentry Then 
     dhours = (hexit + 24) - hentry 
     dminutes = (mexit + 60) - mentry 
     DIFERENCAHORASMINUTOS = Time(dhours, dminutes, 0) 
    Else 
     dhours = (hexit + 24) - hentry 
     dminutes = mexit - mentry 
     DIFERENCAHORASMINUTOS = Time(dhours, dminutes, 0) 
    End If 
Else 
    If mexit < mentry Then 
     dhours = hexit - hentry 
     dminutes = (mexit + 60) - mentry 
     DIFERENCAHORASMINUTOS = Time(dhours, dminutes, 0) 
    Else 
     dhours = hexit - hentry 
     dminutes = mexit - mentry 
     DIFERENCAHORASMINUTOS = Time(dhours, dminutes, 0) 
    End If 
End If 

End Function

Но это дает мне ошибку #value в клетке. Большое спасибо за ваше внимание, и если вам нужна дополнительная информация, чтобы помочь мне, просьба запросить, и я предоставлю вам.

С уважением

ответ

1

Изменение времени() с TimeSerial()

Function DIFERENCAHORASMINUTOS(ByVal EntryTime As Date, ByVal ExitTime As Date) 
Dim hexit, hentry, mexit, mentry, dminutes, dhours As Integer 
hexit = Int(Hour(ExitTime)) 
hentry = Int(Hour(EntryTime)) 
mentry = Int(Minute(EntryTime)) 
mexit = Int(Minute(ExitTime)) 
If ExitTime < EntryTime Then 
    If mexit < mentry Then 
     dhours = (hexit + 24) - hentry 
     dminutes = (mexit + 60) - mentry 
     DIFERENCAHORASMINUTOS = TimeSerial(dhours, dminutes, 0) 
    Else 
     dhours = (hexit + 24) - hentry 
     dminutes = mexit - mentry 
     DIFERENCAHORASMINUTOS = TimeSerial(dhours, dminutes, 0) 
    End If 
Else 
    If mexit < mentry Then 
     dhours = hexit - hentry 
     dminutes = (mexit + 60) - mentry 
     DIFERENCAHORASMINUTOS = TimeSerial(dhours, dminutes, 0) 
    Else 
     dhours = hexit - hentry 
     dminutes = mexit - mentry 
     DIFERENCAHORASMINUTOS = TimeSerial(dhours, dminutes, 0) 
    End If 
End If 
End Function 
+0

Спасибо много для того, чтобы помочь мне. Вы решили мою проблему. – Digmoons

0

Чтобы сделать это с помощью формулы можно использовать

= MOD (B2-A2,1)

+0

Спасибо также за упрощение моей проблемы. – Digmoons

Смежные вопросы