나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 익크 (mykbj1004)

추천:  2
파일:     양두연마 1파트 공정 전산 프로그램(2).xlsm (150.8KB) 조회:  1652
제목:   유저폼 시간계산 질문 드립니다! 살려주세요 ㅜㅜ
     
  - 엑셀 버전(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



오늘도 건강하세요! ^^*
 
[불량 게시물 신고]  
        
  

작성일 : 2018-01-22(19:41)
최종수정일 : 2018-01-23(11:57)