Excel VBA 응용

Stop Watch

kwangpal 2023. 11. 29. 23:14
반응형

Stop Watch 만들기

VBA를 이용해서 스톱워치를 만들 수 있다.

어차피 핸드폰에 있는 거 쓸텐데 무슨 소용일까 싶지만

시간을 다루는 코드를 응용하는 방법을 알아놓으면

나중에 쓸 일이 있겠지...

 

우선 시트에 다음과 같이 입력하고

B2 Cell의 표시 형식을 hh:mm:ss.000 로 변경했다.

1/1000 초 단위 스톱워치를 만들기 위해서다.

 

그리고 빨간 버튼의 이름은 Start_Btn 으로

파란 버튼의 이름은 Reset_Btn 으로 정했다.

 

 

F3 Cell에 시작 이라고 입력하고

빨간 버튼을 마우스로 클릭한 다음

F3 Cell을 클릭하면

다음 그림과 같이 수식에 =$F$3 가 입력된다. (텍스트 편집이 아니다)

그러면 빨간 버튼에 F3 Cell에 입력한 글자가 똑같이 표시된다.

 

 

같은 방법으로

파란 버튼을 마우스로 클릭한 다음

G3 Cell을 클릭하면

다음 그림과 같이 수식에 =$G$3 가 입력된다.

이것도 파란 버튼에 G3 Cell에 입력한 글자를 똑같이 표시하기 위함이다.

 

 

빨간 버튼에 다음 코드를 연결해준다.

 

Sub Start_Btn_Click()

    Dim i As Long
    
    If [F2] = 0 Then            '초기화된 상태면
        [F2] = 1                '작동중으로 전환하고
        [F4] = Timer / 86400    '시작 시간을 기록하고
        [F3] = "일시정지"       '빨간 버튼에 일시정지라고 표시
        [G3] = "기록"           '파란 버튼에 기록이라고 표시
        
        Do
            [G4] = Timer / 86400    '현재 시간 기록
            [B2] = [G4] - [F4]      'Timer 시간 계속 올라가게 함
            If [F2] = 2 Then    '멈추는 경우에는
                Exit Do         'Timer 시간 멈추고 정지
            End If
            DoEvents
        Loop
        
    ElseIf [F2] = 1 Then        '작동중이면
        [F2] = 2                '일시정지로 전환
        [F3] = "계속"           '빨간 버튼에 계속이라고 표시
        [G3] = "초기화"         '파란 버튼에 초기화라고 표시
    ElseIf [F2] = 2 Then        '일시정지중이면
        [F2] = 1                '작동중으로 전환하고
        [F3] = "일시정지"       '빨간 버튼에 일시정지라고 표시
        [G3] = "기록"           '파란 버튼에 기록이라고 표시
        [G4] = Timer / 86400    '현재 시간 기록
        [F4] = [G4] - [B2]      '멈춘 동안 감안해서 시작 시간 기록
        
        Do
            [G4] = Timer / 86400    '현재 시간 기록
            [B2] = [G4] - [F4]  'Timer 시간 계속 올라가게 함
            If [F2] = 2 Then    '멈추는 경우에는
                Exit Do         'Timer 시간 멈추고 정지
            End If
            DoEvents
        Loop
    End If
    
End Sub

 

 

그리고 파란 버튼에 다음 코드를 연결해준다.

 

Sub Reset_Btn_Click()

    If [F2] = 1 Then
        [G2] = [G2] + 1             'Lap 횟수 1씩 증가
        Cells([G2] + 6, 2) = [G2]   'Lap 횟수 기록
        Cells([G2] + 6, 4) = [B2]   'Total time 기록
        Cells([G2] + 6, 4).NumberFormat = "hh:mm:ss.000"     '표시형식 변경
        If [G2] = 1 Then    '첫 Lap 이면
            Cells([G2] + 6, 3) = Cells([G2] + 6, 4)  'Lap time이 Total time임
            Cells([G2] + 6, 3).NumberFormat = "hh:mm:ss.000" '표시형식 변경
        Else                '첫 Lap이 아니면
            Cells([G2] + 6, 3) = Cells([G2] + 6, 4) - Cells([G2] + 5, 4)
                'Lap time은 이번 Total time에서 지난번 Total time을 뺀 것
            Cells([G2] + 6, 3).NumberFormat = "hh:mm:ss.000" '표시형식 변경
        End If
    Else
        'Reset 하기
        [B2] = 0
        [G2] = 0
        [F2] = 0
        [F3] = "시작"
        [G3] = ""
        [B7:D1048576] = ""
        [B2] = 0
    End If

End Sub

 

 

이제 빨간 버튼을 클릭하면

 

 

빨간 버튼에 일시정지라는 글자가 나오고

파란 버튼에 기록이라는 글자가 나온다.

그리고 B2 Cell에 스톱워치 시간이 나오는 것을 볼 수 있다.

 

이 상태에서 일시정지를 클릭하면

스톱워치 시간이 멈추고

계속 할지 초기화를 할지 선택할 수 있다.

계속을 클릭하면 멈췄던 시간이 다시 증가하고

초기화를 클릭하면 시간이 0으로 리셋된다.

 

 

 

일시정지가 아닌 기록을 클릭하면 (여러번 클릭해도 된다)

Lap time이 차례대로 기록된다.

 

 

이 상태에서 일시정지를 클릭하면 시간이 멈추고

계속 할지 초기화를 할지 선택할 수 있다.

 

 

그런데 F2 ~ G4 Cell에 뭔가 있으니 눈에 거슬린다.

글자 색을 흰색으로 슬그머니 바꾸면

 

 

 

이제 안보이지롱

 

 

 

F2 ~ G4 Cell을 이용하는 대신

VBA에서 버튼에 글자 표시하게 하고

변수에 시간을 기록해서 Lap time을 계산할 수도 있긴 한데

눈에 내용이 바로 보이니까 이 방법이 편하다.

반응형

'Excel VBA 응용' 카테고리의 다른 글

Factorial 계산하기  (0) 2023.12.03
Plot Digitizer  (0) 2023.12.02
TSP (Traveling Salesman Problem)  (0) 2023.11.30
소인수분해  (0) 2023.11.29
콜라츠 추측  (0) 2023.11.29