<엑셀VBA 입문 7강> VBA 기초 명령어
VBA는 엑셀에 내장되어 있는 프로그래밍 언어다. VBA 공부는 기본적으로 코딩 공부다.
VBA를 잘 사용하기 위해선 기초 명령어들을 잘 배워둬야 한다. 물론 잘 모른다고 VBA를 사용할 수 없는건 아니다. (눈치 봐서 적당히 가져다 쓰면 된다. Copy And Paste. 일명 복붙.)
이번에는 VBA 기초 명령어를 소개한다.
VBA 기초 명령어는 C, JAVA, 파이썬 등의 기초 명령어와 그다지 다르지 않다. 즉 기존에 프로그래밍을 할줄 안다면 좀 더 편하게 접근할 수 있다.
프로그래밍의 프 자도 모른다고? 괜찮다. 반대로 얘기하면 VBA 기초 명령어를 배워두면 다른 개발 언어를 배울 때 큰 도움이 된다. 언어란게 다 그렇다.
1. 변수
명령어를 알기 전 개념을 다시 짚고 넘어가자. 변수는 가장 중요한 개념 중의 하나다.
변수란 값을 저장하는 공간이다. 흔히들 변수를 상자(Box)에 비유한다. a라는 이름의 상자를 마련했다고 치자. 이를 변수의 선언이라고 한다. Dim a 라고 쓰면 변수 a가 선언된 것이다.
a라는 이름의 상자에 10 이라는 숫자값을 넣는다고 상상해보자. 이를 변수의 대입이라고 한다. a = 10 라고 쓰면 이제 a는 10 이라는 값을 저장한다. 앞으로 a 를 출력하면 10 을 출력한다.
변수는 가진 값을 더할 수도 있고 뺄 수도 있다. 기본적인 사칙연산이 다 가능하다. 더하기는 + 로, 빼기는 – 로, 곱하기는 * [별]로, 나누기는 / [슬래시]로, 나눠서 나머지 구하기는 mod[모드] 라는 명령어로 한다. 예를 들어 a = a + 2 라고 쓰면 기존 a값에 2를 더한 값이 a에 저장된다. 프로그래밍에서 등호(=)는 좌측으로 대입한다는 뜻으로 외우는게 편하다. a = x 는 a ← x 와 다름 없다.
숫자는 사칙연산을 쓰지만, 문자열은 어떻게 더할까? 문자열은 &[앤드] 기호를 이용해 결합할 수 있다. 정리하면 아래와 같다.
‘변수의 선언
Dim a
‘변수의 대입
a = 10 ‘이제 a는 10
‘변수의 사칙연산
a = a + 2 ‘이제 a는 12
a = a – 4 ‘이제 a는 8
a = a * 2 ‘이제 a는 16
a = a / 4 ‘이제 a는 4
a = a mod 3 ‘이제 a는 1
‘다른 변수의 선언
Dim str
‘변수의 대입(문자열)
str = “문자”
‘문자열 변수의 결합
str = str & “열” ‘이제 str은 “문자열”
2. 함수
함수란 입력값을 넣으면 어떤 규칙에 의해 출력값을 되돌려주는 것을 의미한다. 다만 입력값이 없거나, 출력값이 없는 함수도 있다. 입력값이 없는 함수는 입력값 자체가 필요없거나, 전역변수(프로그램 어디에서나 사용하는 변수)를 입력값으로 삼는 경우다. 출력값이 없는 함수는 역시 출력값이 필요없거나, 전역변수에 어떤 값을 대입함으로써 함수의 출력값 없이 끝나는 경우다.
함수는 기본적으로 아래 형태로 작성한다.
Function 함수명(입력변수1, 입력변수2 … )
‘결과변수 선언
Dim result
‘내용
(중략)
‘결과변수 리턴
함수명 = result
End Function
3. 주석
주석은 프로그램 실행에 아무런 영향을 주지 않는 문자열들이다. 대개 참고사항을 적는 용도로 사용한다.
VBA는 문자열 앞에 홑따옴표(‘)를 붙이면 홑따옴표 포함하여 이후 모두 주석처리 된다.
‘1줄 주석
Dim temp ‘여기서부터 또 주석
3. MsgBox
MsgBox(문자열) 명령어 쓰면 작은 알림창을 띄워준다.
디버그(프로그램 오류를 없애는 작업)를 위해 변수값을 확인하는 용도로도 많이 쓰고, 사용자에게 상황을 알리기 위해 많이 쓴다.
예는 아래와 같다.
Dim result
result = 3
MsgBox(“헬로 월드”)
MsgBox(“테스트 결과 : ” & result)
4. InputBox
InputBox(문자열) 명령어 쓰면 기본적인 입력창을 띄워준다. 사용자의 입력값을 변수로 저장시키기 위한 함수다.
Dim myName
myName = InputBox(“이름을 적어주세요.”)
MsgBox(“myName : ” & myName)
5. If
If문은 모든 프로그램의 기본이 되는 명령어다. If 조건 Then 내용 End If 식으로 사용한다.
여러 조건을 체크하기 위해서는 ElseIf문을 사용하고, 어떤 조건도 충족되지 않은 경우는 Else문을 사용한다.
아래 예제 코드를 보면 이해하기 쉬울 것이다.
5-1. 기본 If문
If 조건 Then
‘조건 충족시 수행
End If
5-2. ElseIf의 사용
If 조건1 Then
‘조건1 충족시 수행
ElseIf 조건2 Then
‘조건2 충족시 수행
ElseIf 조건3 Then
‘조건3 충족시 수행
End If
5-3. Else의 사용
If 조건1 Then
‘조건1 충족시 수행
ElseIf 조건2 then
‘조건2 충족시 수행
Else
‘어떤 조건도 충족하지 못했을 경우 수행
End If
6. For
For문도 아주 중요한 명령어에 해당한다. 처음에는 명령어 자체가 헷갈리곤 하는데, 처음 사용할 때는 깊게 고민하기보다 통째로 외우는 편이 좋다.
For 변수명 = 시작인덱스 To 종료인덱스
‘수행할 내용
Next 변수명
보통 For문의 변수명은 i를 사용하며, index의 약자로 추정된다. For문 내부의 내용은 여러번 반복되는데, 시작인덱스가 종료인덱스가 될 때까지 반복 수행한다.
한마디로 For i = 1 To 10 이라고 쓰면 For문 내부를 10번 반복한다.
아래는 예제 코드다.
‘메시지를 10번 띄우는 코드
For i = 1 To 10
MsgBox (i & “번째 메시지”)
Next i
‘For문의 반복횟수를 변수로 조절하기
Dim beginIdx
Dim endIdx
beginIdx = 1
endIdx = 10
For i = beginIdx To endIdx
MsgBox (i & “번째 메시지”)
Next i
‘중첩 For문 사용 해보기. 흔히 “이중포문”이라 불린다.
For i = 1 to 3
For j = 1 to 3
‘(1,1), (1,2), (1,3), (2,1), …, (3,3) 식으로 메시지 순차적으로 띄워줄것
MsgBox (“(” & i & “,” & j & “)”)
Next j
Next i
7. Do ~ Loop
Do문은 특정 조건에 만족하는한 계속 반복되는 함수다. 자칫 잘못하면 절대 끝나지 않는 반복의 늪에 빠지게 되는데, 이를 흔히 “무한루프에 빠졌다”라고 표현한다.
사실 For문과 Do문은 엄밀히 따졌을 때 같은 기능의 함수다. 실제로 For문은 언제든지 Do문으로 바꿔쓸 수 있고, 반대의 경우도 마찬가지다.
상황에 따라 편한대로 For문을 쓰든 Do문을 쓰든 선택하면 된다.
아래와 같이 사용한다.
Do
‘반복 수행할 내용
‘루프 나가기 (반드시 있어야 하는 부분)
If 조건 Then
‘Do 문을 빠져나간다.
‘조건을 충족하지 못하면 무한루프에 빠진다.
Exit Do
End If
Loop
참고로 무한루프에 걸렸다면 Ctrl + Break 키를 누르면 빠져나간다. Break는 보통 키보드 최상단 우측 편에 위치한다.
8. Left, Right, Mid
문자열을 잘라내는 함수다. Left를 쓰면 왼쪽부터 특정 글자수만큼 잘라내고, Right를 쓰면 오른쪽부터 특정 글자수만큼 잘라낸다.
Mid를 쓰면 문자열 중간부터 잘라낼 수 있는데, 사실 Left와 Right 함수 양쪽을 대체할 수 있다.
Left(문자열, 좌측부터 잘라낼 글자수)
Right(문자열, 우측부터 잘라낼 글자수)
Mid(문자열, 잘라내기 시작할 글자번호) 또는 Mid(문자열, 잘라내기 시작할 글자번호, 글자수)
예를 들면 아래 코드와 같다.
Dim str = “문자열”
Dim result
result = Left(str, 1) ‘result 값은 “문”
result = Right(str, 1) ‘result 값은 “열”
result = Mid(str, 1) ‘result 값은 “문자열”
result = Mid(str, 2) ‘result 값은 “자열”
result = Mid(str, 2, 1) ‘result 값은 “자”
9. InStr
특정한 문자열 안에 또다른 특정한 문자열이 몇 번째 글자에 위치하는지 얻어내는 함수.
문자열의 완전일치가 아니라 부분포함 관계를 찾는다는 점에서 여러모로 유용한 함수다.
InStr(찾기 시작할 글자번호, 대상 문자열, 찾는 문자열, vbTextCompare)
예를 들면 아래 코드와 같다.
Dim a
a = InStr(1, “문자열 대상”, “문자”, vbTextCompare) ‘a값은 1
a = InStr(1, “문자열 대상”, “자”, vbTextCompare) ‘a값은 2
a = InStr(1, “문자열 대상”, “없는단어”, vbTextCompare) ‘a값은 0
반드시 필수라고 생각하는 명령어만 모아두었다. 기본적으로 이 정도 기억하고 VBA에 접근하는 것과, 그렇지 않은 것은 천지차이일 것이라 생각한다.
이어지는 글 <엑셀VBA 입문 8강> 셀 내용 가져오기 : https://blog.naver.com/bb_/221260814900
이어지는 글 <엑셀VBA 입문 10강> VBA로 웹파싱하기 (HTML소스 가져오기) : https://blog.naver.com/bb_/221267721181