오늘 끝나면
Sub와 함수
- ✓Sub와 함수의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 Sub와이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
프로시저·인자 — 작업을 묶어 재사용 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
엑셀 VBA · 06
Sub와
함수
코드 한 덩이를 이름 붙여 묶는 게 프로시저임.
Sub는 동작만, Function은 값을 돌려줌.
인자로 입력 받아 한 번 만들고 계속 재사용함.
프로시저 = 코드를 이름으로 묶은 덩어리
매크로 하나가 길어지면 손도 못 댐. 그래서 동작 단위로 묶어 이름을 붙임. 그 묶음이 프로시저임.
프로시저는 두 종류임.
Sub는 동작을 묶음 / 시키면 일을 함.
Function은 계산을 묶음 / 시키면 답을 돌려줌.
둘 다 모양은 비슷함.
Sub 이름() ... End Sub
Function 이름() ... End Function
엑셀에서 누르는 매크로는 전부 Sub임. 매크로 = 인자 없는 Sub라고 보면 됨.
Range("A1").Value = 0
Range("A1").Value = 0
Range("A1").Value = 0
Sub 초기화()
Range("A1").Value = 0
End Sub
초기화 ← 이름만 부르면 끝
Sub는 동작, Function은 값
가장 큰 갈림길은 하나임. 값을 돌려주냐 아니냐.
Sub는 일만 함. 셀에 쓰고, 색 칠하고, 메시지 띄움. 끝나도 손에 남는 값이 없음.
호출은 그냥 이름만 적음 / 색칠하기.
Function은 값을 돌려줌. 그래서 받을 변수가 있어야 함.
합 = 더하기(3, 5) 처럼 = 오른쪽에 둠.
함수 안에서는 함수이름 = 결과로 돌려줄 값을 정함. 이 한 줄이 핵심임.
그래서 Function은 엑셀 셀에서도 바로 씀 / =더하기(A1,B1).
내가 만든 함수가 SUM 옆에 사는 거임.
| Sub | Function | |
|---|---|---|
| 역할 | 동작을 함 | 값을 돌려줌 |
| 끝맺음 | End Sub | End Function |
| 돌려줄 값 | 없음 | 함수이름 = 결과 |
| 호출 | 색칠하기 | 합 = 더하기(3,5) |
| 셀에서 | 못 씀 | =더하기(A1,B1) |
인자 — 밖에서 값을 넣어준다
프로시저가 진짜 쓸모 있어지는 건 인자 덕분임. 괄호 안으로 값을 받아 그때그때 다르게 일함.
선언할 땐 받을 자리를 적음 / Function 더하기(a As Long, b As Long).
여기서 a, b가 매개변수 / 받을 그릇임.
호출할 땐 실제 값을 넣음 / 더하기(3, 5).
넣은 3, 5가 인자 / 실제로 들어가는 값임.
순서대로 짝지어짐 / a=3, b=5.
인자만 바꾸면 같은 코드가 다른 일을 함.
더하기(10, 20)은 30, 더하기(1, 1)은 2.
코드는 하나, 결과는 무한대임.
더하기(3, 5)
Function 더하기(a, b)
인자만 바꾸면 같은 코드가 다른 답을 냄
직접 호출해 본다
말로 백 번 듣는 것보다 한 번 호출해 보는 게 빠름. 오른쪽에서 인자를 넣고 직접 굴려보셈.
위 슬라이더로 a, b를 정함. 그게 괄호 안으로 들어가는 인자임.
호출할 프로시저를 골라 실행하면 아래에 무슨 일이 일어나는지 그대로 나옴.
Sub 색칠(a, b)는 셀을 칠하는 동작만 함 / 돌려받는 값 칸이 비어 있음.
Function 더하기(a, b)는 합을 돌려줌 / 반환값 칸에 숫자가 박힘.
같은 인자라도 Sub는 손에 남는 게 없고, Function은 값을 남김. 이 차이를 눈으로 확인하면 끝임.
Function 더하기(a, b)
더하기 = a + b
End Function
호출: 더하기(3, 5)
Function이라 합을 돌려줌 — 반환값 칸에 박힘. 셀은 안 건드림.
아직 호출 안 함. ▶ 눌러보셈.
한 번 만들면 계속 재사용
프로시저의 진짜 값어치는 재사용임. 한 번 잘 만들면 어디서든 이름만 부르면 됨.
더하기를 한 번 정의해두면, 보고서 합계도 그걸로, 세금 계산도 그걸로 부름.
한 프로시저가 다른 프로시저를 부르기도 함 / 작은 블록을 쌓아 큰 일을 함.
고칠 일이 생겨도 정의 한 곳만 손보면 부르는 데 전부 반영됨.
같은 코드를 열 군데 복붙해두면 열 군데를 다 고쳐야 함 / 그게 버그의 시작임.
그래서 자동화의 기본기는 “반복되는 동작을 프로시저로 묶기”임.
다음(7강)에 배울 이벤트·폼도 결국 이 프로시저를 버튼에 연결하는 일임.
Q. 값을 돌려주는 것은? (Sub · Function · Dim · Range)
정답은 Function임.Function은 함수이름 = 결과로 값을 돌려줘서 합 = 더하기(3,5)처럼 받을 수 있음.
Sub는 동작만 하고 값을 안 돌려줌 / 매크로가 바로 Sub임.
Dim은 변수 선언, Range는 셀을 가리키는 거라 프로시저가 아님.
Function 더하기(a, b)