오늘 끝나면
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)