배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   워크시트, range, cell
제목:   워크시트스타디움 달리기 대회
     
 

New Page 3
  STEP> 따라하기


고국에 계신 국민 여러분 안녕하십니까!!

정확한 발음과 상황판단 그리고 스포츠에 대한 박식함으로 중무장한 스포츠전문 아나운서 신문지입니다.

오늘은 두 달여 남은 2004년 아테네 올림픽과 전혀 상관없이 엑셀 워크시트 스타디움에서 셀 달리기 대회를 열고자 합니다.

각자 자신이 가장 빠르다는 세 명의 선수가 결승에 올라왔습니다. 경기진행방식을 미리 설명 드리자면 우선 대회진행요원이 미리 1000개의 숫자를 워크시트 스타디움의 A 트랙에 늘어 놓습니다.

그리고 세 명의 주자가 순서대로 출발하여 For 루프를 왕복하면서 1000개의 숫자를 주워 담습니다. 그중에서 가장 빨리 달리는 선수가 승자가 됩니다.

첫 번째 선수는 Range선수입니다. Range 선수는 우리에게도 잘 알려진 선수입니다. 하나 이상의 셀이 모이면 바로 Range가 됩니다. 특히 이번에 출전하는 Range선수는 Range("A1")과 처럼 Range안에 직접 셀 주소를 가지는 선수입니다.

두 번째 선수는 Cells선수입니다. Cell선수는 작은 Range라고 불리울 만큼 잘 알려진 선수입니다. Cells선수는 행 번호와 열 번호를 가슴과 등에 붙이고 달리는데요, 종종 없는 번호를 들고 나와 화를 자초하기도 합니다. Error 심판에게 종종 들키기도 하죠

세 번째 선수는 Offset선수입니다. 이 선수는 촌수로 따지면 Range선수의 자식 뻘쯤 되는 선수입니다. 기준이 되는 Range를 바탕으로 행이나 열이 얼마큼 떨어졌냐를 중요하게 여기는 선수입니다. Cell 선수와는 성격이 상반되죠. Range나 Cell선수가 절대적인 위치를 중요하게 여기는 것에 비해 이 선수는 상대적인 위치를 중요하게 여깁니다.

기록은 공정성을 위해 특별히 초빙한 winmm.dll에서 일하시는 timeGetTime씨가 맡겠습니다. 저 분은 요즘 한가하다고 하던데, 특별히 초빙할 필요는 없을 것 같은데 아무튼 정확한 기록을 부탁 드립니다.

아 이제 경기가 시작되려나 봅니다. 슬슬 트랙이 준비되고 선수들이 하나씩 보이기 시작하는 군요

이제 심판위원장인 F5키를 누르거나 표준도구모음의 Sub/사용자 정의 폼 실행 버튼을 클릭하면 경기가 시작될 것입니다.

Sub Olympic()
    Dim i           As Long
    Dim lngLastRow  As Long
    Dim lngTemp     As Long
    Dim rng         As Range
    With ActiveSheet
'// 말씀 드리는 순간 드디어 F5키를 눌러 경기시작을 선언했습니다.
'// Activesheet 스타디움의 A트랙에 1000개의 숫자를 늘어 놓고 있습니다.
        For i = 1 To 10000
            .Cells(i, 1).Value = i
        Next
'// Start프로시져가 호출되면서
'// timeGetTime씨가 기록을 시작하였습니다
        Start
'// 거의 동시에 첫번째 선수 출발했습니다. For루프를 힘차게 왕복하고 
있습니다.
        For i = 1 To 10000
            lngTemp = Range("A" & i).Value
        Next
'// 벌써 경기를 끝나고 돌아온 Range 선수!
'// 직접 실행 창을 돌아보면서 기록을 확인하고 있습니다.
        Debug.Print "Test 1: " & Finish
'// timeGetTime씨가 다시 기록을 시작하였습니다.
        Start       '
// 2번째 Cells선수, Range 선수에 이어 출발했습니다.
        For i = 1 To 10000
            lngTemp = .Cells(i, 1).Value
        Next
        Debug.Print "Test 2: " & Finish
        Start
'// 3번째 선수, 2번째 선수에 이어 출발하고 있습니다.
'// 그런데 이 선수, 시작하자 마자 출발점을 찾고 있습니다
'// A1셀을 찾아서 rng변수에 담고 있습니다.
'// Offset 선수, 출발점 찾느라 시간을 많이 버리는 것 같은데요,
        Set rng = .Range("A1")
'// Offset선수 드디어 출발을 하고 있습니다.
'// 이 선수 특이하게 For루프를 0번부터 돌고 있습니다
'// Offset선수의 특성상 0 부터 해야 출발점을 밟고
'// 출발하는 셈입니다. 대신 10000에서 하나 빠진 지점까지만
'// 돌면 되니까 결국 For 루프를 만 번 도는 셈입니다.
        For i = 0 To 10000 - 1
            lngTemp = rng.Offset(i, 0).Value
        Next
'// 마지막 주자인 Offset 선수 경기를 끝내고
'// [직접 실행]창을 통해 자신의 기록을 확인하고 있습니다.
        Debug.Print "Test 3: " & Finish
    End With
End Sub

곧 경기결과가 나올 것 같습니다. (잠시 침묵)...
경기를 열심히 시청하고 계신 여러분께 죄송한 말씀을 드립니다.
정규방송관계로 중계방송을 여기서 마칩니다.
(스포츠중계 테마음악이 흘러나오면서)
경기결과는 알아서 확인해보시길 바랍니다.