스킬캠퍼스

오늘 끝나면

Sub와 함수

  • Sub와 함수의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 Sub와이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

프로시저·인자 — 작업을 묶어 재사용 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

엑셀 VBA · 06

Sub와
함수

코드 한 덩이를 이름 붙여 묶은 것이 프로시저다.
Sub는 동작만 하고, Function은 값을 돌려준다.
인자로 입력을 받아 한 번 만들어 두면 계속 재사용한다.

P.01엑셀 VBA · 06

프로시저 = 코드를 이름으로 묶은 덩어리

매크로 하나가 길어지면 손도 못 댄다. 그래서 동작 단위로 묶어 이름을 붙인다. 그 묶음이 프로시저다.

프로시저는 두 종류다.
Sub는 동작을 묶은 것이라 시키면 일을 한다.
Function은 계산을 묶은 것이라 시키면 답을 돌려준다.

둘 다 모양은 비슷하다.
Sub 이름() ... End Sub
Function 이름() ... End Function
엑셀에서 누르는 매크로는 전부 Sub다. 매크로는 인자 없는 Sub라고 보면 된다.

흩어진 코드를 이름 하나로
흩어진 코드를 이름으로 묶는다
묶기 전, 같은 줄이 여기저기

Range("A1").Value = 0

Range("A1").Value = 0

Range("A1").Value = 0

묶은 뒤, Sub 하나로

Sub 초기화()

Range("A1").Value = 0

End Sub

초기화, 이름만 부르면 끝난다

프로시저 = 코드 덩어리에 붙인 이름
P.02엑셀 VBA · 06

Sub는 동작, Function은 값

가장 큰 갈림길은 하나다. 값을 돌려주느냐 아니냐다.

Sub는 일만 한다. 셀에 쓰고, 색을 칠하고, 메시지를 띄운다. 끝나도 손에 남는 값이 없다.
호출할 때는 그냥 이름만 적는다. 색칠하기 이렇게.

Function은 값을 돌려준다. 그래서 받을 변수가 있어야 한다.
합 = 더하기(3, 5)처럼 = 오른쪽에 둔다.
함수 안에서는 함수이름 = 결과로 돌려줄 값을 정한다. 이 한 줄이 핵심이다.

그래서 Function은 엑셀 셀에서도 바로 쓴다. =더하기(A1,B1) 이렇게.
내가 만든 함수가 SUM 옆에 사는 셈이다.

시키면 일한다 vs 시키면 답한다
Sub ↔ Function
SubFunction
역할동작을 한다값을 돌려준다
끝맺음End SubEnd Function
돌려줄 값없음함수이름 = 결과
호출색칠하기합 = 더하기(3,5)
셀에서못 씀=더하기(A1,B1)
값을 손에 남기려면 Function
P.03엑셀 VBA · 06

인자, 밖에서 값을 넣어준다

프로시저가 진짜 쓸모 있어지는 건 인자 덕분이다. 괄호 안으로 값을 받아 그때그때 다르게 일한다.

선언할 때는 받을 자리를 적는다. 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 = 3
b = 5

인자만 바꾸면 같은 코드가 다른 답을 낸다

P.04엑셀 VBA · 06

직접 호출해 본다

슬라이더로 a, b를 정하면 그 값이 괄호 안으로 들어가는 인자다. 호출할 프로시저를 골라 실행하면 결과가 그대로 나온다.

Sub 색칠(a, b)는 셀을 칠하는 동작만 해서 돌려받는 값 칸이 비어 있다.
Function 더하기(a, b)는 합을 돌려줘서 반환값 칸에 숫자가 박힌다.

같은 인자라도 Sub는 손에 남는 게 없고 Function은 값을 남긴다.

인자를 넣고 Sub·Function을 굴려본다
프로시저 호출기 · 인자를 넣어 실행
호출할 프로시저
인자, 괄호 안에 들어가는 값
a3
b5
실행될 코드

Function 더하기(a, b)

더하기 = a + b

End Function

호출: 더하기(3, 5)

결과, Sub는 동작, Function은 값
반환값
동작(셀)

Function이라 합을 돌려준다. 반환값 칸에 박힌다. 셀은 안 건드린다.

호출 기록, 최근 5건

아직 호출하지 않았다. ▶ 눌러 본다.

P.05엑셀 VBA · 06

한 번 만들면 계속 재사용

프로시저의 진짜 값어치는 재사용이다. 한 번 잘 만들면 어디서든 이름만 부르면 된다.

더하기를 한 번 정의해두면 보고서 합계도 그걸로 부르고 세금 계산도 그걸로 부른다.
한 프로시저가 다른 프로시저를 부르기도 한다. 작은 블록을 쌓아 큰 일을 한다.

고칠 일이 생겨도 정의 한 곳만 손보면 부르는 데 전부 반영된다.
같은 코드를 열 군데 복붙해두면 열 군데를 다 고쳐야 한다. 그게 버그의 시작이다.

그래서 자동화의 기본기는 “반복되는 동작을 프로시저로 묶기”다.
다음 7강에서 배울 이벤트와 폼도 결국 이 프로시저를 버튼에 연결하는 일이다.

Q. 값을 돌려주는 것은? (Sub · Function · Dim · Range)정답은 Function이다.
Function함수이름 = 결과로 값을 돌려줘서 합 = 더하기(3,5)처럼 받을 수 있다.
Sub는 동작만 하고 값을 안 돌려준다. 매크로가 바로 Sub다.
Dim은 변수 선언이고 Range는 셀을 가리키는 것이라 프로시저가 아니다.
같은 함수 · 다른 인자로 여러 번
한 번 정의 · 여러 번 호출
정의 한 곳

Function 더하기(a, b)

더하기(10, 20)보고서 합계30
더하기(3, 5)세금 계산8
더하기(1, 1)재고 갱신2
고칠 때는 정의 한 곳만 손보면 부르는 데 전부 반영된다

3줄 요약

  1. 1프로시저·인자 — 작업을 묶어 재사용
  2. 2Sub와 함수은 매크로 → 변수·셀 → 조건·반복 → 폼 → 자동화 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

Sub와

프로시저·인자 — 작업을 묶어 재사용

매크로

기록하거나 작성해 실행하는 자동화 코드

Sub

실행 단위가 되는 프로시저