본문 바로가기
오빠두엑셀 스터디/VBA 4주 완성

[1주차] VBA란? / 매크로 기록, 함수 만들기

by 취준생 에몽가 2022. 7. 3.

1️⃣ 핵심 이론

 

VBA 란?
office 프로그램을 위한 프로그래밍 언어

 

VBA의 장점

① (엑셀 설치되어있다는 전제 하에) 설치, 패키징 필요 없음 

 

VBA의 단점

① 라이브러리가 제한적

② 실행 취소가 불가능

 

VBA 쓰는 이유는?
(데이터를, 기능을) 자동화시키기 위해서

 

VBA 구분

시트 / 통합 문서

- 시트나 통합 문서에서 실행하는 명령문

- 클릭, 실행, 더블 클릭 등의 이벤트 작성

 

유저 폼

- 유저 폼 안에서 실행하는 명령문

- 클릭, 실행, 더블 클릭 등의 이벤트 작성

 

모듈 (매크로 기록)

- 그 외 전반적으로 모든 상황에서 쓰이는 코드를 작성

 

 

 

 

 

 

 

 


2️⃣ 실습

매크로를 작성했다면!
매크로 포함 문서로 파일을 저장해야 함 (. xlsm 파일)

외부에서 매크로 파일을 다운로드하였다면, 매크로 차단을 방지하기 위해서
아래와 같은 단계를 거쳐야 함
우클릭 → 속성 → 차단 해제 선택 → 적용
차단 해제를 클릭해야 매크로를 사용할 수 있다.

 


① 파일을 열었을 때, 메세지 박스 출력

현재 통합 문서 - Workbook 선택

 

MsgBox (출력할 내용)을 작성

글씨를 넣을 때는 " " 사이에 넣어야 함

결과 값

 

 

 

 

 

 


② 시트를 클릭했을 때, 메세지 박스 출력 

현재 통합 문서 - Workbook 선택 - SheetActivate 선택

 

MsgBox (출력할 내용)을 작성

시트를 클릭하면 메세지 박스가 출력됨

결과 값

 

 

 

 

 


③ 버튼을 클릭했을 때, 빈칸에 "미제출", 노란색 바탕으로 출력

▼ 매크로 만들기 ▼

개발 도구 - 매크로 기록 선택

 

매크로의 이름, 저장위치 설정

 

B2 셀을 클릭하고 컨트롤 A로 전체 선택

 

범위가 선택된 상태에서 컨트롤 G - 옵션

 

이동 옵션 : 빈셀 선택 - 확인

 

빈셀만 선택되는 것을 볼 수 있음

 

F2 (작성창 선택) - 미제출 작성 - 컨트롤 enter (한 번에 채우기)

 

채우기 색 : 노란색

 

개발 도구 - 기록 중지

 

 

 

 

▼ 매크로 버튼 만들기 ▼

원하는 도형 삽입하기

 

폰트, 가운데 맞춤 설정

 

도형 서식 - 도형 효과 설정

 

도형 우클릭 - 매크로 지정

 

매크로 설정

*매크로 확인 시, 매크로 만들며 채워진 내용을 지워야 오류가 없음

 

 

 

 

 

▼ 내용이 추가되었을 때 인식하게끔 만들기 ▼

매크로 기록을 토대로 작성된 코드

범위가 제한적이기 때문에

새로운 내용을 입력해도 인식하지 못함

 

범위 코드를 예시처럼 수정

❗ 코드 해석

Range("B2") : B2 셀에서
CurrentRegion : 현재의 영역을
Select : 선택함

 

추가된 내용에도 매크로가 적용됨

 

 

 

 


④ 비만도 계산하는 함수 만들기

Sub 
Sub Procedure의 약자. 어떤 동작을 실행해야 할 때 사용 (실행문)

Function
어떤 값을 결과로 출력해야 할 때 사용 (계산식, 함수에 주로 사용)

 

 

▼ 함수 만들기 ▼

Function : 선언

BMI (몸무게 Weight, 키 Height) 
: 함수의 이름 (인수 값 1, 인수 값 2)

비만도 = 몸무게(kg) / 키(m) ^2
: 몸무게는 50kg, 키는 160cm라 가정   ▶   BMI = 50 / (160 / 100) ^ 2
* 키가 cm이기 때문에 m로 변환해야 함

BMI = Weight / (Height / 100) ^ 2

 

예시

 

 

 

▼ 비만도 계산하기 ▼

BMI 라는 함수가 생김

 

몸무게와 키를 인수로 넣음

 

자동 채우기

 

 

 


⑤ 주민 등록 번호로 성별을 판별하는 함수 만들기 

▼ 함수 만들기 ▼

Function : 선언

ID_Gender (주민등록번호 ID) 
: 함수의 이름 (인수 값 1)

WorksheetFunction
: VBA로 엑셀의 워크시트 함수를 사용하겠다는 의미

ⓐ 주민 등록 번호의 8번째 자리 성별을 뜻함
 💗 = mid (주민등록번호 ID, 8, 1)
: ID의 / 8번째 자리부터 / 1번째 글자를 출력함

ⓑ 홀수는 남자, 짝수는 여자
 💗 isodd ( mid(주민등록번호 ID, 8,1) )

: 인수로 넣은 숫자가 홀수면 True, 짝수면 False

ID_Gender = WorksheetFunction. isodd ( mid(주민등록번호 ID, 8,1) )
: ID_Gender 함수는 워크시트의 mid 함수와 isodd 함수를 사용한다는 뜻

---------------------------------------------------------------------------

IF ID_Gender = True Then
: 만약에 ID_Gender의 값이 True 라면

ID_Gender = "남자"
: ID_Gender는 남자라고 출력된다.

Else
: True가 아니라면

ID_Gender = "여자"
: ID_Gender는 여자로 출력된다.

 

▼ 성별 판별하기 ▼

ID_Gender 함수가 있는지 확인
인수로 주민등록번호를 입력

 

자동채우기

 

 


3️⃣ 미션

① 빈셀 찾기, 노란색 채우기, 미제출을 입력하는 매크로

가운데 정렬을 추가했음

 

실행 결과

 

 

② Find_Gender(이름) 함수를 만들어 이름을 입력하면 성별이 출력되는 함수 

함수

 

실행 결과

 

 

 


4️⃣ 궁금증

조건부 서식을 VBA에 넣는 게 효율적인지...?

아니면 그냥 조건부 서식을 만드는게 나은지...