엑셀 VBA 기초강좌 1탄! 누구나 쉽게 입문하는 코딩방법

PC & IT|2020. 9. 25. 13:49
반응형

사무실에서 업무를 하다보면 엑셀에서 은근히 단순하게 반복되는 업무들이 있습니다. 직접 하자니 뭔가 귀찮고 안할수도 없고 일정한 패턴이 보이는게 이거 왠지 매크로를 잘 활용하면 쉽게 처리가 될듯 싶은데? 생각되는 업무들이 꼭 있습니다. 

 

저는 일단 단순 반복 업무가 주어지게 되면 일단 일정한 패턴을 찾습니다. 일정하게 반복되는 업무같은 경우 그 패턴만 잘 잡아내면 매크로로 코딩하여 돌려주기만 하면 끝이거든요. 코딩에 시간이 오래걸리지 않느냐 하시겠지만 3~4시간 걸릴 업무 코딩 30분에서 1시간 하고 돌리면 끝나기 때문에 저는 차라리 코딩을 합니다.

 

또 저는 반복 업무가 너무나도 지겨워서 비슷한 시간이 걸린다고 하더라도 차라리 머리를 쓰면서 직접 코딩해서 돌리고 말아버리지 직접 하지 않습니다. 왜냐! 귀차니즘 때문이죠. 빌게이츠가 이런 말을 했습니다. 게으른 사람이 일을 잘한다고 합니다. 귀찮기 때문에 뭔가 편한 방법이 없나? 생각하면서 발상의 전환을 가져가기 때문이죠.

 

오늘 여러분들께 새로운 발상을 할 수 있는 배움의 장을 마련해드리고자 이런 글을 쓰게 되었습니다. 엑셀 VBA의 뜻은 Visual Basic for Application 즉 엑셀을 위한 비쥬얼 베이직이며 엑셀에 비쥬얼 베이직 언어를 접목시킨 형태라고 볼 수 있습니다.

 

비쥬얼 베이직 언어 자체가 다른 언어에 비해 구조가 직관적이고 흐름을 읽기 편해 초보자들도 쉽게 접근할 수 있는데요. 오늘 그 기초에 대해서 간단하게 알려드리고자 합니다.

 

1강 VBA 언어의 기초 파악하기

 

엑셀을 켜신 후 Alt + F11을 누르게 되면 화면 하나가 열릴겁니다. 이게 저희가 직접 작업할 화면입니다. VBA에서 작성하는 코드는 프로시저라고 하며 보통 Sub 프로시저와 Function 프로시저로 구성이 되어 있습니다. Sub 프로시저는 사용자가 지정한 특정한 임무를 수행하는 녀석입니다. 그리고 Function은 입무를 수행하게 되면 그 결과값을 표출하는 역할을 합니다. 함수 프로시저라고도 하죠. 아무튼 Sub 이름 치고 엔터를 눌러주세요.

 

그러면 이렇게 프로시저가 구성이 됩니다. 저희는 이 안에서만 놀것입니다. 그렇다고 해서 다른 프로시저에 간섭을 할 수 없느냐? 그렇지는 않습니다. 충분히 다른 프로시저와도 연계해서 작업을 할 수 있습니다. 하지만 그건 추후에 알려드리도록 하겠습니다.

 

1. 변수

변수는 앞으로 코딩을 하면서 정말 중요하게 작용하는 개념입니다. 이 변수를 잘 활용하게 되면 100줄의 소스코드도 10줄로 줄일 수 있을 정도로 아주 유용하게 사용하게 되는데요. 코딩의 실력을 떠나서 센스도 아마 크게 작용하지 않나 싶습니다.

 

변수라는 것은 말 그대로 변하는 수입니다. 문자에 내가 직접 상황에 맞게 값을 대입 할 수 있어 조건식을 걸 때 아주 유용하게 사용이 됩니다.

 

저는 이 a라는 변수에 1이라는 값을 대입하였습니다. 그러면 이 a의 값는 무엇일까요? 

 

 

또 다시 저는 b라는 변수에도 똑같이 1이라는 값을 대입하였습니다. 그런데 a와는 뭔가 달라보이는군요. 그러면이 b라는 값은 무엇일까요?

정답은 둘다 1입니다. 다만 같은 1은 아닙니다. 무슨뜻이냐구요? MsgBox라는 명령어를 통해 값을 보여드린 후 설명드리도록 하겠습니다.

 

MsgBox를 통해 a와 b가 같은지에 대해 값을 표출하였더니 다르다고 합니다. 그렇다면 a의 결과값과 b의 결과값은 어떨까요? 아 그리고 MsgBox는 밑에서 따로 설명을 드리도록 하겠습니다.

 

자 MsgBox를 통해 a와 b의 결과값을 표출해보았습니다. 참고로 vbCr은 줄바꿈 기능입니다.

둘다 a는 결과값으로 1을 표출하였고 b역시 결과값으로 1을 표출하였습니다. 그런데 왜 다를까요? 변수를 대입할때 숫자 입력시 큰 따옴표 없이 대입하게 되면 숫자값(value)으로 대입이 되며 큰 따옴표와 같이 대입하게 되면 문자값(String)으로 대입이 됩니다. 즉 a는 숫자 1로 대입이 되었으며 b는 문자 1로 대입이 되었다는 것이죠. 

 

이러한 결과값을 통해 우리가 알 수 있는 또한가지 사실은 문자를 변수에 대입할 때 큰따옴표 안에 넣어서 대입을 해야 된다는 사실까지 추가로 알게 되었습니다.

2. For 문

For 문은 특정 작업을 반복하는 임무를 수행하는 명령어입니다. Sub와 End Sub와 같이 For역시 next 안에서만 작업이 이루어지게 되는데요. 특정 변수를 지정하고 시작 숫자 to 종료 숫자로 지정을 해주면 해당 숫자만큼 반복해서 작업이 이루어지게 됩니다. 

 

저는 a라는 변수에 1부터 10까지의 숫자를 순차적으로 대입하도록 명령을 하였습니다. 그리고 MsgBox를 통해 a라는 값의 결과값을 표출해보도록 할텐데요. 어떤 결과값을 보여줄까요?

 

이렇게 순차적으로 명령을 수행해주는 역할을 합니다. 보시는 바와 같이 a라는 변수에 1부터 10까지의 숫자값을 대입해주었죠.

 

Q. 이 순서를 반대로 할 수 있나요?

 

Q. 홀수값만 표출 할 수 있나요?

 

A. Step이라는 기능을 통해 둘다 가능합니다.

 

For에는 원래 Step이라는 명령어가 따릅니다. For a = 1 To 10 Step 1 이런식으로 말이죠. 하지만 Step 1같은 경우 따로 지정해주지 않아도 자동으로 지정이 되기 때문에 생략을 하게 됩니다만 2 이상의 숫자의 경우 직접 대입을 해주어야 합니다. 일단 결과값을 한번 보실까요?

 

 

처음에 매크로 창이 뜨는 모습을 볼 수 있는데요. 프로시저 밖에 포인트를 두고 지정하게 되면 저렇게 매크로를 선택하라는 창이 뜹니다. 왜냐 매크로를 따로 지정을 하고 실행하지 않았으니까요. 아무튼 저희가 원하는대로 Step 2라는 명령을 추가하니 홀수만 뜨는 모습을 볼 수 있습니다. 만약에 짝수만 보고싶다. 그러면 이제 a에 대입하는 숫자값에 1을 더해주면 되겠죠.

 

그렇다면 반대로 하려면 어떻게 해야될까요? 아래 보기 두개를 드리겠습니다.

 

보기 A

보기 B

이거는 여러분들이 한번 직접 해보시기 바랍니다. 힌트를 드리자면 Step의 의미에 대해서 자세히 생각해보시면 도움이 되지 않을까 싶습니다.

 

3. MsgBox

위에서 계속적으로 결과값을 표출하는 도구로 MsgBox라는 명령어를 사용하는 모습을 볼 수 있었습니다. MsgBox는 말 그대로 메시지박스입니다. 안내 또는 경고 또는 위와 같이 결과값을 표출하는 등에 사용할 수 있죠.

 

MsgBox라는 명령어에 괄호를 열면 이렇게 쭉 뭔가 노란색 박스 안에 영어들이 나열이 되어 있죠. MsgBox의 구조라고 보시면 되겠습니다. 

 

Prompt = 내가 표출하고자 하는 문자열

Buttons as VbMsgBoxStyle = vbOKOnly = 메시지박스의 버튼 구조, 생략시에는 확인버튼만 표출됨

Title = 메시지박스의 제목

HelpFile = 도움말입니다. 도움말을 표출하고 싶다면 도움말이 적힌 문서의 링크를 달아주면 됩니다.

Context = 도움말 파일의 항목번호를 지정해줍니다. 보통 HelpFile과 Context는 거의 사용하지 않으니 무시하셔도 됩니다.

 

 

vbOKOnly 0 확인 버튼 만 표시 합니다.
vbOKCancel 1 확인  취소 버튼을 표시 합니다.
vbAbortRetryIgnore 2 중단 , 재시 도 및 무시 버튼을 표시 합니다.
vbYesNoCancel  , 아니요  취소 버튼을 표시 합니다.
vbYesNo 4   아니오 버튼을 표시 합니다.
vbRetryCancel 5 재시도  취소 버튼을 표시 합니다.
vbCritical 16 중요 메시지 아이콘을 표시 합니다.
vbQuestion 32 경고 쿼리 아이콘을 표시 합니다.
vbExclamation 48 경고 메시지 아이콘을 표시 합니다.
vbInformation 64 정보 메시지 아이콘을 표시 합니다.
vbDefaultButton1 0 첫 번째 버튼이 기본값입니다.
vbDefaultButton2 256 두 번째 버튼이 기본값입니다.
vbDefaultButton3 512 세 번째 버튼이 기본값입니다.
vbDefaultButton4 768 네 번째 버튼이 기본값입니다.
vbApplicationModal 0 애플리케이션 모달; 사용자는 현재 응용 프로그램에서 작업을 계속하기 전에 메시지 상자에 응답해야합니다.
vbSystemModal 4096 시스템 모달; 사용자가 메시지 상자에 응답 할 때까지 모든 응용 프로그램이 일시 중단됩니다.
vbMsgBoxHelpButton 16384 메시지 상자에 도움말 버튼을 추가합니다 .
vbMsgBoxSetForeground 65536 메시지 상자 창을 전경 창으로 지정합니다.
vbMsgBoxRight 524288 텍스트가 오른쪽 정렬됩니다.
vbMsgBoxRtlReading 1048576 히브리어 및 아랍어 시스템에서 텍스트가 오른쪽에서 왼쪽으로 표시되도록 지정합니다.

버튼값의 경우 이런식으로 다양하게 버튼을 적용할 수 있으며 이 버튼 클릭 값 역시 표출이 가능하여 메시지박스의 버튼값에 따라 조건을 걸어서 명령을 내릴 수 있습니다. 예를 들어드리는게 이해가 빠르시겠군요.

 

 

이렇게 a라는 변수에 메시지박스의 결과값을 입력할 수 있습니다. 코드를 하나씩 해석하자면 메시지박스를 통해 안녕하신지 물어보았습니다. 만약에 a의 결과값이 안녕하다고 yes를 클릭했을 경우 메시지박스를 통해 안녕하시답니다.라는 문자값의 메시지박스가 표출이 되며 만약에 안녕하지 못하다고 No를 클릭했을 경우 안녕하지 못하답니다. 라는 문자값이 뜨겠죠. 보여드리겠습니다.

보시는바와 같이 버튼 클릭값에 따라서 결과가 달라지는 모습을 볼 수 있죠. 그렇다면 또 저 IF문은 무엇일까요? 이거는 다음 이시간에 여러분들께 알려드리도록 하겠습니다. 

320x100

댓글()