매크로 기록을 넘어 직접 코드를 작성하고 싶으신가요? 그렇다면 VBA라는 '언어'의 기본 문법부터 이해해야 합니다.
VBA 코드는 몇 가지 핵심 '구성 요소'의 조합일 뿐입니다. 마치 단어를 알아야 문장을 만들 수 있듯, 이 기본 개념을 이해하는 것이 코드를 읽고 쓰는 모든 과정의 튼튼한 기초가 됩니다.
이 글은 VBA의 뼈대가 되는 12가지 필수 개념을 정리했습니다. 이것만 알아도 코드가 더 이상 암호처럼 보이지 않을 겁니다. 모든 정보는 신뢰도 높은 Microsoft 공식 문서를 기반으로 하며, 아래 각 항목을 클릭하면 해당 설명서로 바로 연결됩니다.
1. Character sets (문자 집합)
VBA가 인식하고 사용할 수 있는 문자(알파벳, 숫자, 특수 기호, 한글 등)의 범위를 정의합니다. 어떤 문자 집합을 사용하느냐에 따라 처리할 수 있는 언어가 달라집니다.
- Character set (0 - 127): 문자 집합 (0 - 127) (기본 ASCII)
- Character set (128 - 255): 문자 집합 (128 - 255) (확장 ASCII)
2. Constants (상수)
변수(Variable)와 반대되는 개념으로, 프로그램 실행 중에 절대 변하지 않는 값에 붙이는 이름입니다. 예를 들어, 메시지 박스의 '예/아니요' 버튼을 나타내는 vbYesNo는 이미 정해진 상수입니다.
- Calendar (달력 형식): 날짜 계산 시 그레고리력 또는 이슬람력을 사용할지 지정하는 상수입니다.
- CallType (호출 유형): 프로시저가 함수(Function)로 호출되었는지, 서브(Sub)로 호출되었는지 등을 구분하는 데 사용됩니다.
- Color (색상): vbRed, vbBlue처럼 미리 정의된 색상 값을 나타냅니다.
- Comparison (비교 방식): 문자열을 비교할 때 대소문자를 구분할지(vbBinaryCompare) 또는 구분하지 않을지(vbTextCompare) 지정합니다.
- Date (날짜): vbSunday, vbMonday처럼 요일을 나타내는 상수를 포함합니다.
- Date Format (날짜 서식): vbLongDate (자세한 날짜 형식)처럼 시스템에 설정된 날짜/시간 표시 형식을 지정합니다.
- Dir, GetAttr, and SetAttr: 파일의 속성(읽기 전용, 숨김 등)을 확인하거나 설정할 때 사용하는 상수들입니다.
- DriveType (드라이브 유형): 해당 드라이브가 하드 디스크인지, CD-ROM인지, 네트워크 드라이브인지 등을 구분합니다.
- File Attribute (파일 특성): 파일이 '읽기 전용'(vbReadOnly), '숨김 파일'(vbHidden) 등의 어떤 특성을 가졌는지 나타냅니다.
- File Input/Output (파일 입출력): 파일을 열 때 읽기 모드(For Reading), 쓰기 모드(For Writing), 추가 모드(For Appending) 등을 지정합니다.
- Form (폼): 사용자 정의 폼을 화면에 표시할 때 다른 창과 상호작용을 막을지(vbModal) 여부를 결정합니다.
- IMEStatus (입력기 상태): 현재 키보드 입력 상태가 한글인지 영문인지 등을 확인하는 데 사용됩니다.
- Keycode (키 코드): vbKeyF1, vbKeyEnter처럼 키보드의 각 키를 나타내는 고유한 코드입니다.
- Miscellaneous (기타): vbCrLf(줄 바꿈)처럼 특정 분류에 속하지 않는 다양한 상수들이 포함됩니다.
- MsgBox (메시지 박스): 메시지 상자에 표시될 버튼(vbOKCancel), 아이콘(vbInformation) 등의 모양과 동작을 지정합니다.
- QueryClose (닫기 질의): 사용자 정의 폼이 어떻게 닫히고 있는지를 나타냅니다. (예
- Shell (셸): 외부 프로그램을 실행할 때 창의 스타일(숨김, 최소화 등)을 지정합니다.
- SpecialFolder (특수 폴더): '내 문서', '바탕 화면' 등 윈도우의 특수 폴더 경로를 쉽게 찾을 수 있도록 돕습니다.
- StrConv (문자열 변환): 문자열을 대문자로, 소문자로, 또는 유니코드로 변환하는 등 다양한 변환 방식을 지정합니다.
- System Color (시스템 색상): 윈도우 테마에 설정된 창 배경색, 스크롤바 색상 등을 가져올 때 사용합니다.
- Tristate (세 가지 상태): 확인란(Checkbox) 등에서 참(True), 거짓(False) 외에 '설정 안 됨' 또는 '기본값' 상태를 나타낼 때 사용합니다.
3. Data types (데이터 형식)
변수에 저장될 데이터의 종류를 지정합니다. 예를 들어, Integer(정수), String(문자열), Date(날짜), Boolean(참/거짓) 등이 있으며, 데이터 형식에 따라 메모리 사용량과 처리 방식이 달라집니다.
데이터 형식 (Data type) | 메모리 크기 (Storage size) | 값의 범위 (Range) |
Boolean (불리언) | 2 바이트 | True 또는 False (참 또는 거짓) |
Byte (바이트) | 1 바이트 | 0 ~ 255 |
Collection (컬렉션) | 알 수 없음 | 개체(Object)의 참조 |
Currency (통화) | 8 바이트 | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 (소수점 4자리까지의 고정 소수점 숫자) |
Date (날짜) | 8 바이트 | 100년 1월 1일 ~ 9999년 12월 31일 |
Decimal (10진수) | 14 바이트 | ±79,228,162,514,264,337,593,543,950,335 (소수점 없는 경우) 또는 소수점 이하 28자리까지의 숫자 |
Dictionary (딕셔너리) | 알 수 없음 | 개체(Object)의 참조 |
Double (배정밀도 부동 소수점) | 8 바이트 | 음수: -1.797...E+308 ~ -4.940...E-324 양수: 4.940...E-324 ~ 1.797...E+308 |
Integer (정수) | 2 바이트 | -32,768 ~ 32,767 |
Long (긴 정수) | 4 바이트 | -2,147,483,648 ~ 2,147,483,647 |
LongLong (아주 긴 정수) | 8 바이트 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (64비트 시스템에서만 유효) |
LongPtr (포인터 정수) | 32비트: 4 바이트 64비트: 8 바이트 |
32비트: Long과 동일 64비트: LongLong과 동일 |
Object (개체) | 4 바이트 | 모든 개체(Object)의 참조 |
Single (단정밀도 부동 소수점) | 4 바이트 | 음수: -3.402...E+38 ~ -1.401...E-45 양수: 1.401...E-45 ~ 3.402...E+38 |
String (가변 길이 문자열) | 10 바이트 + 문자열 길이 | 0 ~ 약 20억 자 |
String (고정 길이 문자열) | 문자열 길이 | 1 ~ 약 65,400 자 |
Variant (숫자형) | 16 바이트 | Double의 범위까지의 모든 숫자 |
Variant (문자형) | 22 바이트 + 문자열 길이 | 가변 길이 String과 동일 |
User-defined (사용자 정의 형식) | 각 요소에 필요한 크기의 합 | 각 요소의 범위는 해당 요소의 데이터 형식과 동일 |
4. Directives (지시문)
VBA 코드가 실행되기 전, 컴파일러(번역기)에게 특정 작업을 지시하는 특별한 명령어입니다. 대표적으로 #If...Then...#Else는 특정 조건에 따라 코드의 일부를 컴파일에 포함하거나 제외할 때 사용됩니다.
- #Const 지시문 : 컴파일 단계에서 사용할 상수(변하지 않는 값)를 정의합니다.
- #If...Then...#Else 지시문 : 특정 조건에 따라 선택된 코드 블록만 프로그램에 포함하여 컴파일합니다.
5. Events (이벤트)
사용자의 특정 행동(예: 버튼 클릭, 셀 선택)이나 시스템의 상태 변화에 따라 **자동으로 실행되는 코드 블록(프로시저)**입니다. 예를 들어, '워크시트를 활성화했을 때(Worksheet_Activate)' 코드를 실행하는 것이 이벤트 처리입니다.
- Activate, Deactivate (활성화, 비활성화): 폼이나 개체가 화면에서 활성화되거나 비활성화될 때 발생하는 이벤트입니다.
- Initialize (초기화): 개체가 메모리에 처음 생성될 때(만들어질 때) 한 번 실행됩니다.
- QueryClose (닫기 질의): 폼이 닫히기 직전에 발생하며, 닫기 동작을 취소할 기회를 줍니다.
- Resize (크기 조정): 사용자가 폼의 크기를 변경할 때 발생합니다.
- Terminate (종료): 개체가 메모리에서 완전히 사라질 때 실행됩니다.
6. Functions (함수)
특정 작업을 수행하고 그 결과를 값으로 반환하는 코드 묶음입니다. 엑셀의 SUM 함수처럼 VBA에서도 직접 함수를 만들어 계산 결과를 되돌려 받을 수 있습니다. (Sub 프로시저와는 달리 값을 반환하는 것이 특징입니다.)
7. Keywords (키워드 / 예약어)
VBA 언어에서 특별한 의미를 가지고 있어 문법의 일부로 예약된 단어들입니다. 예를 들어 Dim, If, For, Sub 등은 이미 기능이 정해져 있으므로 변수나 함수 이름으로 사용할 수 없습니다.
- Arrays (배열): 여러 개의 데이터를 하나의 변수 이름으로 관리하는 방법에 대한 키워드입니다.
- Compiler directives (컴파일러 지시문): #If처럼 특정 조건에 따라 코드의 일부를 컴파일에 포함하거나 제외시키는 특별 명령어입니다.
- Control flow (제어 흐름): If...Then, For...Next, Select Case처럼 코드의 실행 순서를 제어하는 문법입니다.
- Conversion (데이터 형식 변환): CInt, CStr처럼 데이터를 한 종류에서 다른 종류로 바꾸는 함수들입니다.
- Data types (데이터 형식): Integer, String처럼 변수에 저장될 데이터의 종류를 정의합니다.
- Dates and times (날짜 및 시간): Date, Now처럼 날짜와 시간을 다루는 함수 및 키워드입니다.
- Directories and files (디렉터리 및 파일): MkDir, Kill처럼 폴더와 파일을 관리하는 명령어입니다.
- Errors (오류 처리): On Error처럼 코드 실행 중 오류가 발생했을 때 대처하는 방법을 정의합니다.
- Financial (재무 관련): 이자율, 상환액 계산 등 재무 계산에 사용되는 함수들입니다.
- Input and output (입력 및 출력): 사용자로부터 값을 입력받거나(InputBox), 파일에 데이터를 쓰는 등 입출력에 관한 명령어입니다.
- Math (수학):VBA에서 사용할 수 있는 수학 관련 함수들의 모음입니다
- Miscellaneous (기타):특정한 분류에 속하지 않는 다양한 기능의 함수나 명령어들을 모아놓은 범주입니다.
- Operators (연산자):값들을 계산하거나, 비교하거나, 연결하는 데 사용되는 기호들을 의미합니다.
- Registry (레지스트리):윈도우 운영 체제의 설정 정보를 저장하는 데이터베이스인 '레지스트리'를 제어하는 함수들을 의미합니다.
- String manipulation (문자열 처리): Left, Right, Mid, InStr처럼 문자열을 자르거나, 찾거나, 합치는 함수들입니다.
- Variables and constants (변수와 상수): Dim, Const처럼 데이터를 저장할 공간(변수)이나 변하지 않는 값(상수)을 선언하는 방법입니다.
8. Microsoft Forms (사용자 정의 폼)
사용자로부터 정보를 입력받거나 옵션을 선택하게 하는 대화 상자(창)를 직접 디자인할 수 있는 기능입니다. 텍스트 상자, 버튼, 목록 상자 등을 배치하여 전문적인 프로그램을 만들 수 있습니다.
- Collections, controls, and objects (컬렉션, 컨트롤, 개체): 사용자 정의 폼(UserForm)을 구성하는 모든 '부품'과 그 묶음에 대한 설명입니다.
- Dialog boxes (대화 상자): 우리가 만드는 사용자 정의 폼(UserForm) 자체가 바로 '대화 상자'입니다. 이 항목에서는 폼을 화면에 표시하고(Show), 숨기는(Hide) 방법 등 대화 상자로서의 폼을 제어하는 방법에 대해 설명합니다.
- Events (이벤트): 사용자의 행동이나 시스템의 상태 변화에 따라 자동으로 실행되는 '사건'을 의미합니다. '...할 때'라는 조건에 해당하는 코드를 작성하는 부분입니다.
- Examples (예제): 위에서 설명한 개체, 속성, 메서드, 이벤트를 활용하여 실제로 코드를 작성한 다양한 예시를 보여줍니다. 코드를 처음 작성할 때 가장 참고하기 좋은 부분입니다.
- Methods (메서드): 개체가 수행할 수 있는 구체적인 '동작' 또는 '행동' (동사)을 의미합니다.
- Properties (속성): 개체가 가지고 있는 고유한 '특징'이나 '상태 정보' (형용사)를 의미합니다. 컨트롤의 모양, 크기, 색, 글자 등을 변경할 때 사용합니다.
9. Objects (개체)
VBA가 제어할 수 있는 모든 대상을 의미합니다. 예를 들어 엑셀 응용 프로그램 자체(Application), 통합 문서(Workbook), 워크시트(Worksheet), 특정 셀(Range) 등이 모두 개체입니다. 각 개체는 고유의 속성(Properties)과 메서드(Methods)를 가집니다.
- Collection (컬렉션):여러 개의 항목(데이터, 개체 등)을 순서대로 담을 수 있는 '보관함'입니다. .Add로 추가하고 .Item으로 특정 항목을 꺼낼 수 있습니다.
- Debug (디버그):코드 실행 중에 변수의 값이나 특정 메시지를 '직접 실행' 창에 출력하여 테스트(디버깅)할 때 사용하는 개체입니다. Debug.Print가 가장 대표적인 사용법입니다.
- Dictionary (딕셔너리):고유한 '키(Key)'와 그에 해당하는 '값(Value)'을 한 쌍으로 저장하는 고급 보관함입니다. 사전에서 단어를 찾듯, 키를 이용해 값을 빠르고 쉽게 찾을 수 있습니다.
- Drive (드라이브):컴퓨터의 C
- Drives collection (드라이브 컬렉션):컴퓨터에 연결된 모든 드라이브의 목록을 담고 있는 개체입니다.
- Err (오류 개체):VBA 코드 실행 중 오류가 발생했을 때, 해당 오류에 대한 정보(오류 번호, 설명 등)를 담고 있는 개체입니다. On Error 구문과 함께 사용되어 오류를 처리합니다.
- File (파일):하나의 파일을 나타내는 개체입니다. 파일의 이름, 크기, 만들어진 날짜 등의 속성을 확인할 수 있습니다.
- Files collection (파일 컬렉션):특정 폴더 안에 있는 모든 파일의 목록을 담고 있는 개체입니다.
- FileSystemObject (파일 시스템 개체):파일, 폴더, 드라이브를 쉽게 다룰 수 있도록 다양한 기능을 제공하는 강력한 개체입니다. 파일 생성, 복사, 이동, 삭제 등 파일 시스템과 관련된 거의 모든 작업을 할 수 있습니다.
- Folder (폴더):**하나의 폴더(디렉터리)**를 나타내는 개체입니다. 폴더 이름, 경로 등의 정보를 가집니다.
- Folders collection (폴더 컬렉션):특정 폴더 안에 있는 모든 하위 폴더의 목록을 담고 있는 개체입니다.
- TextStream (텍스트 스트림):텍스트 파일(.txt)의 내용을 한 줄씩 읽거나, 새로운 내용을 쓰는 등 텍스트 파일의 입출력을 순차적으로 처리할 때 사용하는 개체입니다.
- UserForm (사용자 정의 폼):사용자가 직접 디자인한 대화 상자(창) 자체를 의미하는 개체입니다. 이 폼 위에 버튼, 텍스트 상자 등을 올려 사용자 인터페이스를 만듭니다.
10. Operators (연산자)
값들을 계산하거나 비교하는 데 사용되는 기호입니다. +, - 같은 산술 연산자, =, > 같은 비교 연산자, And, Or 같은 논리 연산자가 있습니다.
연산자 (기능) | 종류 | 설명 |
* operator | 산술 연산자 (Arithmetic operators) | 수학 계산을 수행하는 데 사용되는 연산자입니다. |
^ operator | ||
/ operator | ||
\ operator | ||
Mod operator | ||
+ operator | ||
- operator | ||
= operator | 비교 연산자 (Comparison operators) | 두 값을 비교하는 데 사용되는 연산자입니다. |
Is operator | ||
Like operator | ||
& operator | 연결 연산자 (Concatenation operators) | 두 문자열을 하나로 합치는 데 사용되는 연산자입니다. |
+ operator | ||
And operator | 논리 연산자 (Logical operators) | 논리 연산(참/거짓 판단)을 수행하는 데 사용되는 연산자입니다. |
Eqv operator | ||
Imp operator | ||
Not operator | ||
Or operator | ||
Xor operator |
11. Statements (구문)
하나의 완전한 명령을 구성하는 코드의 한 줄 또는 여러 줄을 의미합니다. 예를 들어, A = 10 이나 If A > 5 Then ... End If 전체가 하나의 구문입니다.
12. Visual Basic Add-Ins (Visual Basic 추가 기능)
만들어진 매크로나 사용자 정의 함수를 다른 사람들도 쉽게 설치하고 사용할 수 있도록 패키지화한 파일(.xlam)입니다. 엑셀에 새로운 기능을 추가하는 '플러그인'처럼 작동합니다.
- Collections(컬렉션):VBA가 제어할 수 있는 모든 대상을 의미합니다
- Events(이벤트):개체가 가지고 있는 고유한 특징이나 상태 정보입니다.
- Objects(개체):개체가 수행할 수 있는 구체적인 **'동작'이나 '행동'**입니다.
- Methods (메서드): 개체가 수행할 수 있는 '동작'이나 '행동'입니다. (예
- Properties (속성): 개체가 가지고 있는 '정보'나 '특징'입니다. (예
* 이 페이지의 내용은 Microsoft 공식 VBA 문서를 참조하여 작성되었습니다.
'엑셀 팁 & 가이드 > VBA & 매크로' 카테고리의 다른 글
엑셀 VBA 함수와 명령어 검색기 : VBA 코딩, 막힐 땐 이 페이지부터! (0) | 2025.07.07 |
---|---|
엑셀 매크로 사용법: 기초부터 보안, 응용까지 (0) | 2025.07.06 |
댓글