이전 편에서는 엑셀 매크로 프로그래밍에서 중요한 반복문에 대해 설명하였습니다. 이번 편에서는 매크로 프로그래밍에서 가장 자주 사용되는 조건문인 if문과 select문, 그리고 변수 타입과 배열에 대해 예제를 통해 상세히 설명하겠습니다.
단순 반복작업 자동화: 엑셀 매크로 활용 방법과 팁 #4/8 (기초 프로그래밍 문법 - if, select, 변수타입, 배열)
프로그래밍에서 가장 많이 쓰이는 분기문인 if와 select에 대해서 알아보고, 변수타입과 배열에 대해서도 이해하기 쉽도록 설명하겠습니다. 이번 편을 통해서 쉽게 분기문과 변수, 배열을 사용하실 수 있으실
것입니다.
목차
1. If
2. Select
3. 변수타입
4. 배열
If 문
if문은 아래와 같은 형식으로 사용합니다.
IF 조건식 Then
참일때 실행문
Else
거짓일때 실행문
End If
If는 반복문과 함께 프로그래밍에서 가장 많이 쓰이는 조건문입니다. 우리 일상 생활에서도 “만약 비가 오면 난 집에 있을 거야”, “만약 내가 백만장자라면 매일 놀고먹을 거야” 와 같이 조건에 따라
다른 액션을 취하는 경우가 많은데 프로그래밍에서도 마찬가지입니다.
이전 편에서 사용했던 Do while 반복문을 활용해서 1부터 100까지의 합계를 구하는 코드를 if문을 활용할 수 있도록 고쳐보면 아래와 같을 것입니다.
이전 편에서 작성했던 코드와 달라진 부분을 한번 찾아보겠습니다.
우선 Do While (True)로 바뀌었고, isum = isum + i 과 i = i + 1 이 If문 안으로 들어갔습니다. 왜 이렇게 바뀌었는지 바로 이해했다면 if문은 더 이상 설명을 읽을
필요없이 건너 뛰어도 됩니다.
아니라면 계속해서 설명을 보시면 됩니다.
Do While (Ture)는 항상 참이기 때문에 무한루프가 돌 수밖에 없습니다. 그래서 무한루프에 걸리지 않도록 하기 위해서는 Loop를 벗어날 수 있도록 조건을 판단해서 벗어날 수 있도록 해줘야
한합니다.
위의 코드를 해석하면,
if를 통해 i가 100을 넘는지 판단합니다. 만약 i가 100을 넘지 않는다면 i를 100이 될 때까지 증가시키면서 isum에 i를 계속해서 더하고, i가 100이거나 100이 넘으면 Exit
Do를 실행시켜 Loop에서 벗어날 수 있도록 합니다.
Do While에 조건문을 둘지, 위와 같이 if를 사용할지는 사용자에 따라 달라지기 때문에 편한대로 사용하면 됩니다.
If 관련해서 조금만 더 들어가 보도록 하겠습니다.
만약 다음과 같은 상황이라면 If를 어떻게 써야 할까요?
“내일 비도 오고 날씨도 추우면 약속을 취소할 거야.”
보시다시피 조건이 하나가 아니라 둘입니다. 이렇게 조건이 하나가 아닐 경우 And와 Or을 사용해야 합니다.
아래 코드를 보겠습니다.
코드를 보기 전에 주석에 대해서 알아볼 필요가 있습니다. 지금까지 예제로 만들었던 소스는 대부분 간단하기 때문에 코드를 설명하는 주석을 ( ‘ 홑 따옴표 사용, 주석은 코드에 설명을 추가위해
사용합니다.) 적지 않았습니다. 그러나 코드가 길고 복잡해 진다면 본인이 작성한 코드라도 시간을 흐른 후 다시보면 이해하기 어려운 경우가 아주 많습니다. 그렇기 때문에 주석으로 코드에 설명을 추가하는
습관을 들이는 것이 좋습니다.
위의 코드는 사용자로부터 입력을 받은 숫자가 100보다 작은 홀수인지 짝수인지 판단하여 Msgbox로 결과를 띄어 주며, 입력된 숫자가 100이 넘지 않을 경우 계속 반복하고, 100이 넘으면
메시지를 띄우고 프로그램을 종료하는 코드입니다.
위에서 처럼 100이 넘는지와 홀수인지 짝수인지를 동시에 판단해야 할 경우 And를 써서 구현할 수 있고 만약 둘 중 하나의 조건만 맞으면 될 경우 Or를 쓰면 됩니다.
그리고 여기서는 어느정도 엑셀을 사용할 수 있는 사람을 대상으로 하기 때문에 엑셀과 동일한 연산자(=, <>, >, <, >=, <=) 에 대한 설명은 하지
않겠습니다.
Select 문
Select Case 는 if보다 다중조건을 처리하는데 상당히 유용합니다. 예를 들어 성적이 90점이상 A, 80점 이상 B, 70점 이상 C, 60점 이상 D, 60점 미만 F라고 할 때
Select Case 문을 쓰면 아래와 같습니다.
Select Case 성적
Case 91 to 100
Msgbox “학점 : A“
Case 81 to 90
Msgbox “학점 : B“
Case 71 to 80
Msgbox “학점 : C”
Case 61 to 70
Msgbox “학점 : D”
Case Else
Msgbox “학점 : F”
End Select
변수타입
앞에서 나왔던 모든 소스에는 변수 선언시 타입을 써주지 않았지만 변수타입 관리를 소홀히 하면 예상치 못한 에러가 발생할 수 있으니 가능한 프로그래밍을 할 때 타입을 써 주는 것이 이해하기도
쉽고 예상하지 못한 실수를 방지할 수 있어 좋습니다.
또한 Dim i As Integer, Dim s As String 등으로 정의하면 해당 변수가 어떤 데이터 타입을 핸들링하기 위해 선언된 것인지 쉽게 알 수 있는 장점이 있습니다.
배열
여기 1학년에 4반까지 있는 중학교가 있습니다. 각 반에는 학생이 10명씩 있고 학생마다 1부터 10번까지 번호가 부여되어 있다고 생각해 보겠습니다. 이를 배열로 표현하면 아래의 표와 같습니다.
위의 표를 VBA로 문법형식으로 표현하면 다음과 같습니다.
- 1차원 배열 : Dim Grade1(10) As String
- 2차원 배열 : Dim Grade(4,10) As String
1차원 배열인 Grade(10)은 String 형식으로 된 10개의 빈 공간이 있다는 의미이며, 각 배열인수가 가리키는 것은 아래와 같습니다.
- Grade(1) 은 1반 1번 (가을이)
- Grade(2) 는 1반 2번 (겨울이)
- Grade(3) 은 1반 3번 (봄이)
- Grade(4) ~ Grade(10)은 빈 공간
반면 2차원 배열 Grade(4, 10)에서 앞은 반을, 뒤는 번호를 의미하며 각 배열인수가 가리키는 것은 아래와 같습니다.
- Grade(1, 1) 은 1반 1번
- Grade(1, 2) 는 1반 2번
- Grade(4, 8) 은 4반 8번
즉, 4반 8번에 “아름이” 를 넣고 싶으며 Grade(4, 8) = “아름이” 로 하면 되고, 반대로 4반 8번의 이름을 알고 싶으면 name = Grade(4,8) 과 같이 하면 됩니다.
만약 배열을 사용하지 않고 일반 변수를 사용하였다면 1반에서 4반까지 표현하기 위해 40개의 변수가 필요하지만, 배열을 사용하면 이처럼 편하고 쉽게 처리할 수 있게 됩니다.
여기서는 2차원 배열 까지만 설명하기로 하겠습니다. 실제 프로그래밍에서도 2차원을 넘는 배열은 잘 사용하지 않기 때문입니다.
이번 편에서는 분기문인 If와 Select, 그리고 변수타입과 배열에 대해서 이해하기 쉽도록 상세하게 설명하였습니다. 만약 이해가 되지 않았다면 몇번이고 반복해서 읽어보시면 충분히 이해하실 수 있으실
것입니다.