엑셀 vba공부하기 - 폼만들기,모듈적용하기

대부분 직장 생활을 하게 되면
기본적으로 엑셀을 하게됩니다
간단한 자료 관리정도 수준에서
대부분 편리하게 사용을 합니다
저 또한 엑셀을 잘 하지는 못하지만
업무상 필요에 의해 엑셀을 조금은 다룹니다
그런데 언제부턴가 엑셀 vba 란게 있어서
공부를 해볼려고 몇차례 하다가
개념 자체가 이해가 안되어서 보기만 하였습니다
그런데 얼마전 갑자기 vba를 활용한 폼(form)을
만드는 과정이 재미있게 보여졌습니다
그래서 공부를 하기로 했습니다
저와 같이 아마도 엑셀 vba의 개념을
익히는데 힘드신 분들을 위하여 비록 초보지만
제가 아는 범위 내에서 알기 쉽게 설명해 볼가 합니다

엑셀 vba의 기초 개념
아주 쉽게 설명 드리겠습니다

엑셀은 우리가 데이터를 엑셀시트에 표현해 놓은 것입니다
아래 그림과 같이 우리가 가로(열)와 세로(행)에 자료를 입력하죠
이렇게 입력한 자료를 우리가 좀더 쉽고 유용하게 사용하기 위해
vba를
이용해 화면에 표현하고자 하는 것입니다

위 그림 처럼
우측 윈도우 화면처럼 된다면
좀더 재미있고 역동적인
사무자동화가 이루어 지겠죠^^
위 그림의 우측 윈도우 입력창을 만드는 것이
vba 입니다
자 그럼 하루만에 저걸 이해하긴 어렵겟지만
제가 하는 것을 따라해보기 해보면 엑셀 vba가
무엇인지 개념 정립을 할 수가 있습니다

엑셀 vba를 하기전 우선 알아야 할 것들
엑셀 vba는 매크로(일괄처리기능)의 형태를
이용하여 여러단계에 걸처 진행하는 것을
한 단계만으로 압축하여 진행 할 수 있습니다
vba를 사용하기 위해서는
엑셀초기 세팅을 바꾸어 주어야 합니다
1단계:위 화면의 버튼을 찿아서 눌러 주게되면


2단계: 엑셀옵션버튼 클릭 ▶기본설정의 [리본메뉴에 개발도구 창표시] 체크
이것이 뭐냐면 우리가 사용하는 엑셀창에
vba 을 하기 위해 필요한 도구를 설치해야
엑셀 vba를 할 수 있을 것이닌간요 ^^
그럼 아래와 같이 엑셀화면창에 바뀌어 있을 것입니다

기존에 없었던 버튼이 하나 생겼죠? ㅎㅎ
개발도구 버튼입니다. 그 버튼을 클릭하게 되면
아래와 같이 vba를 할 수 있는 여러 조건들을 볼수 있을 것입니다
3단계: 보안 설정입니다
-어려운것 아닙니다 그냥 설정입니다

EXCEL옵션 ▶보안센터▶보안센터 설정
순서대로 따라갑니다
신뢰할 수 있는 위치 선택을 설정해 줍니다
본인이 만든 엑셀VBA파일을 위치해 놓을
파일 경로지정 입니다
저는 그냥 바탕화면에 놓은 상태로 세팅했습니다
자 엑셀 VBA를 하기위한
초기작업을 세팅완료 했습니다
그럼 실습을 하면서 VBA가
어떤 것인지 해봅시다
.
.
.
실습예제 1
1. 빈 엑셀화면에 가로열에 아래 그림과 같이 입력해 봅니다

2, h4 셀에 우측식을 넣습니다 ( = sum(F4:F15)
좀더 무식하게 아래와 같이 넣어도 됩니다 ㅎㅎ
=F4+F5+F6+F7+F8+F9+F10+F11+F12+F13+F14+F15
3. 이제 개발도구 =>Visual Basic(아래그림)을 클릭해봅니다

클릭을 하게 되면
아래 그림과 같이
비쥬얼베이직 편집화면이 뜹니다

위 그림에 대해 간단히 설명하고 넘어 가야 겠습니다
1) 엑셀화면에 있는 sheet1,2,3 이 있습니다
우리들이 사용하는 엑셀 시트입니다
2 ) 폼 - vba프로그램으로 만들어서 사용할 폼입니다

3) 모듈: 매크로 기능이라고 보면 됩니다
이 기능은 자동화 과정의 필수 요소입니다
즉 우리가 여러번 작업할 것을 한 과정으로
압축한 것이라고 생각하면 됩니다
3-1 폼만들어 보기
삽입버튼을 풀다운해서 사용자정의폼 을 클릭하면
좌측창에 userform1이란 것이 생성됩니다
그것을 클릭하세요^^
그러면 위 그림과 같이 폼 입력창이 뜰것입니다
그럼 폼안에 우리가 필요로한 버튼을
도구상자에 있는 것을 이용하여 넣어 보겠습니다
일단 도구상자 두번째 마지막 것- 명령버튼- 을 클릭하여 활성화합니다
그리고 우측 윈도우 박스 안에 명령버튼을 설치합니다

명령버튼을 넣었다면
명령버튼의 이름을 지어 주어야 겠죠?
이름을 지어주는 방법은 두가지 입니다
하나는 직접 명령버튼 안을 더블클릭하여 글을 바꾸어 주는 것
두번째는 속성창의 caption에 입력하여 바꾸어 주는 것입니다.
속성(보기-속성창 / 또는 단축키 F4)을 열어
속성중 caption에 직접입력방법을 하면 됩니다
어때요 캡션에 글자를 직접입력하여 바꾸어 보았습니다
그냥 따라해 봅니다 몰라도 됩니다 ㅎㅎ
======================================================
또하나의 버튼을 필요합니다
텍스트버튼입니다

위 좌측그림 버턴( 텍스트 버튼)을 폼에 넣어 줍니다
왜 두개의 버튼을 사용하냐구요?
총점구하기를 클릭했을 시 아래 빈 네모상자안에
엑셀시트의 H4셀의 총점합계금액을
나타내게 해줄려는 것입니다
3-2 폼의 버튼에 들어갈 프로그램 짜보기
폼을 만들었습니다
그럼 저 총점구하기 버튼을 눌렀을 때
자동으로 실행되야할 프로그램을
넣어 주어야 겠죠?
복잡하지 않습니다 그냥 따라해 보기만 하면
어떻게 VBA가 구성되었는지 개념을 이해 할 수 있습니다
총점구하기 버튼을 더블 클릭합니다
그럼 프로그램입력 창이 뜹니다

이런 형태의 창이 자동으로 뜨게 됩니다
그럼 거기에 다음과 같이 코딩을 해줍니다

.
Private Sub CommandButton1_Click()
TextBox1.Text = Val(Cells(4, 8))
End Sub
.
이렇게 코딩을 마치고 엑셀화면으로 이동합니다
F4,F5,F6,F7 셀에 임의의 값을 입력합니다

총점합계가 자동으로 나오도록 H4에 수식을 입력해 두었기 때문에
각 항을 입력할 때 마다 총점합계는 변하게 되겟죠? ㅎㅎㅎ
======================================================
다시 VBA화면으로 이동하여
이제 폼과 코딩을 완료하였으니 실행을 하여야 겠습니다
실행 =>사용자 정의 폼 실행버튼을 클릭하면


3-3 폼을 엑셀화면에서 실행해보기
위와 같은 화면이 엑셀화면과 함께 출력이 됩니다
거기서 총점구하기를 클릭하게 되면 빈 네모상자안에
총점합계가 표시되는 것을 확인 할 수 있습니다
자 기초적인 VBA 를 이용한 폼을 엑셀화면에 출력하였죠?
=========================================
여기서 끝이 아닙니다
엑셀화면에서 시작을 하기위하여
해야 할 것들이 있습니다
1 엑셀화면에서 폼을 불러와야 합니다
그러기 위해서는 엑셀 화면상에 폼열기 버튼을
만들어서 폼을 불러와야 겟죠?
그러기 전에 폼열기 버튼을 클릭했을때
폼이 열리는 프로그램을 작성해야 합니다
VBA창으로 이동하여

삽입=> 모듈 클릭
그러면 좌측에 모듈이 만들어지고 빈 코드입력창이 뜹니다
그러면 아래와 같이 폼열기 소스를 입력해 줍니다

이제 폼열기 코딩을 했으므로 엑셀화면으로 돌아가
폼열기 버튼을 만들어 야 겠죠?
개발도구 =>삽입 => 양식컨트롤 중 명령버튼 선택 => 단추1을 엑셀시트에 배치
자 그럼 단추1(필요에 따라 이름을 바꾸어 쓰세요)을
클릭했을 때 폼이 열리게 하기위하여는
VBA 모듈1에 작성하였던 것을 불러 연동을 시켜야 합니다
단추1 위에 마우스 오른쪽 버튼을 눌릅니다
그러면 아래 화면과 같이 풀다운 창이 뜹니다
그중 메크로지정을 클릭 하면 우리가 작성해 놓은
폼열기 메크로가 있습니다 그걸 선택하여 주세요


그러면 버튼1은 폼열기 매크로와 연동이 되었습니다
그럼 버튼1을 클릭을 해보면 폼이 열리는 것을 확인 할 수 있습니다

2 종료하기 버튼이 필요합니다
폼안에 종료 명령버튼을 추가해서
폼을 닫기를 해야 합니다
VBA화면으로 이동하여~~~
폼에 명령버튼 하나를 더 추가 합니다

명령버튼을 추가 해서 폼화면에 배치합니다
그리고 좌측 캡션에서 [종료]로 바꾸어 줍니다
그리고 위 폼에서[ 종료] 버튼을 더블 클릭하면
코드입력창이 뜹니다
거기에 다음과 같이 입력합니다

.
Private Sub CommandButton2_click()
Unload Me
End Sub
.
위 코드는 명령버튼2(종료)를 클릭 했을 때
"나를 닫아달라" Unload Me
란 명령어입니다
위 단계는 필수적인 것이라
모든 VBA폼을 활용할 때 필수적인 것입니다
이제 모든 절차를 마치었습니다
그럼 엑셀화면에서 실행하는 일만 남았죠?
ㅎㅎㅎ

마지막 점검하기
엑셀화면에서
버튼1을 클릭해 봅니다
그리고 폼이 출력되어 뜨면
총점구하기와 종료버튼을 눌러 봅니다
이상없이 작동하였다면
님들은 이미 엑셀 VBA를 이용하여
뭔가를 이룬 것입니다 ^^


감사합니다