|
- 엑셀 버전(2007)
안녕하세요!
모두 황사 조심 하시고 도라지가 기관지에 좋다고 합니다! 건강챙기세요!
먼저... 살려주세요... 이것때문에 며칠 고생이네요 ㅜㅜ
오늘 드릴 질문은 지정된 시간에 해당하면 작업시간(분)에서 차감하는 것 입니다.
기존에 가지고있는 코드는 시트에서 사용 가능했는데 유저폼에서 사용하려니
며칠을 고민하면서 해봐도 답이 안나오네요;; ㅜㅜ 절실합니다....
저희회사의 식사/휴식 시간은 하기와 같습니다.
하기---------------------------------------------------------------------------
주간 10:00~10:10(휴식), 12:00~13:00(식사), 15:00~15:10(휴식), 17:00~17:30(식사)
야간 22:00~22:10(휴식), 24:00~01:00(식사), 03:00~03:10(휴식), 05:00~05:10(휴식)
-------------------------------------------------------------------------------
구하고 싶은 것은
EX) 작업시작(11:00) ~ 작업종료시간이(14:00) 이라고 가정하면 12:00~13:00(식사) 시간과 곂치게 되는데요,
(첨부된시트의)기존 방식대로 계산한다면 180분이 결과 로 나와지게 되는데
총 가동시간란에 120분의 결과가 나왔으면 합니다
아래는 사용했던 코드구요.. 첨부자료 참조 바랍니다!
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Function dhGetWorkTime(dblStart As Double, _
dblEnd As Double, _
ParamArray vEtc() As Variant)
Dim i As Integer
Dim intStart As Integer
Dim intEnd As Integer
Dim datSum As Double
Dim datTemp As Double
Dim blnEvening As Boolean
Dim rngRef(1 To 2) As Range
If dblEnd < dblStart Then dblEnd = dblEnd + 1
If dblEnd < dblStart Then Exit Function
blnEvening = CBool(dblEnd > 1) '하루를 초과하는 경우에 제대로 계산되 않기
intStart = LBound(vEtc)
intEnd = UBound(vEtc)
datSum = dblEnd - dblStart
'제외할 시간을 엑셀 범위로 지정한 경우에 사용할 수 있도록 추가
If intEnd - intStart = 1 And (TypeName(vEtc(intStart)) = "Range" And TypeName(vEtc(intEnd)) = "Range") Then
Set rngRef(1) = vEtc(intStart)
Set rngRef(2) = vEtc(intEnd)
If rngRef(1).Rows.Count = rngRef(2).Rows.Count Then
intEnd = rngRef(1).Rows.Count
intStart = 1
For i = intStart To intEnd
If dblStart <= rngRef(1).Cells(i, 1).Value Then
If dblEnd >= rngRef(2).Cells(i, 1).Value Then
datSum = datSum - (rngRef(2).Cells(i, 1).Value - rngRef(1).Cells(i, 1).Value)
Else
End If
Else
If blnEvening Then
If 0 <= rngRef(1).Cells(i, 1).Value Then
If (dblEnd - 1) >= rngRef(2).Cells(i, 1).Value Then '추가
datSum = datSum - (rngRef(2).Cells(i, 1).Value - rngRef(1).Cells(i, 1).Value)
Else
End If
Else
End If
Else
End If
End If
Next i
Else
End If
Else
For i = intStart To intEnd Step 2
If dblStart <= vEtc(i) Then
If dblEnd >= vEtc(i + 1) Then
datSum = datSum - (vEtc(i + 1) - vEtc(i))
Else
End If
Else
If blnEvening Then
If 0 <= vEtc(i) Then
If (dblEnd - 1) >= vEtc(i + 1) Then
datSum = datSum - (vEtc(i + 1) - vEtc(i))
Else
End If
Else
End If
Else
End If
End If
Next i
End If
dhGetWorkTime = datSum
End Function
오늘도 건강하세요! ^^*
|
|