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 |