초보자를 위한 VBA 기초부터 실전까지
Excel VBA 프레젠테이션: 기초부터 실전 프로젝트까지
Excel VBA란?

1

VBA 정의
Visual Basic for Applications

2

Excel에서의 역할
스프레드시트 작업 자동화 및 확장

3

사용 이유
반복 작업 자동화, 사용자 정의 기능 생성
VBA 편집기 소개
접근 방법
Alt + F11 키 사용
주요 구성 요소
프로젝트 탐색기, 속성 창, 코드 창
[개발 도구] 탭 표시하기
  • [파일] - [옵션]을 클릭합니다.
  • [Excel 옵션] 대화상자에서 [리본 사용자 지정]을 클릭하고 오른쪽 '리본 메뉴 사용자 지정' 리스트에서 [개발 도구]를 체크한 다음 [확인]을 클릭합니다
매크로 녹화 기능 (1)

1

1단계
개발자 탭에서 '매크로 기' 선택

2

2단계
매크로 이름 지정 및 설명 입력

3

3단계
원하는 작업 수행
매크로 녹화 기능 (2)

1

4단계
'매크로 중지' 버튼 클릭

2

5단계
VBA 편집기에서 녹화된 코드 확인

3

실습
VBA 편집기 단축키
Alt + F8 : 매크로의 메뉴의 실행 Alt + F11 : Visual Basic 편집기를 기동한다 Alt + F11 : Excel을 기동한다 Alt + Q : 종료하고 Excle로 돌아간다 Ctrl + → : 오른쪽 단어로 이동한다 Ctrl + ← : 왼쪽 단어로 이동한다 Ctrl + ↑ : 앞 프로시저 Ctrl + ↓ : 다음 프로시저 Ctrl + A : 모두 선택 Ctrl + Alt + A : 입력 후보 Ctrl + Break : 중단 Ctrl + Delete : 단어의 끝까지 삭제한다 Ctrl + E : 파일의 내보내기 Ctrl + End : 모듈의 끝으로 이동한다 Ctrl + F : 찾기(검색) Ctrl + F2 : 북 마크를 바꾸다 Ctrl + F8 : 커서의 앞까지 실행 Ctrl + H : 이미디에이트 윈도 Ctrl + G : 교체 Ctrl + Home : 모듈의 처음으로 이동한다 Ctrl + I : 퀵 세트 Ctrl + J : 속성/메서드의 일람 Ctrl + N : 파일 가져오기 Ctrl + P : 인쇄 Ctrl + PgDn : 한 화면 아래로 Ctrl + PgUp : 한 화면 위로 Ctrl + Q : 반복한다 Ctrl + R : 프로젝트 탐색기 Ctrl + S : 저장 Ctrl+Shift+F2 : 원래의 위치로 이동 Ctrl+Shift+F9 : 모든 브레이크 포인트 해체 Ctrl+Shift+F8 : 스텝 아웃 Ctrl+Shift+I : 피라미터 힌트 Ctrl+Shift+J : 상수의 일람 Ctrl+Spacebar : 입력 후보 Ctrl + V : 붙이기 Ctrl + W : 조사식의 편집 Ctrl + Y : 현재 행을 삭제한다 Ctrl + Z : 원래대로 돌아간다
프로시저
프로시저는 한줄의 코드나 여러 줄의 코드로 작성된 작은 단위의 묶음입니다.
  • Sub 프로시저: VBA에서 가장 기본적인 프로시저로, 독립적인 작업을 수행하는 코드 블록입니다. Sub 프로시저는 특정 이벤트 발생 시 실행되거나 프로그래밍을 통해 직접 호출할 수 있습니다.
  • Function 프로시저: Sub 프로시저와 유사하지만 입력 데이터를 받아 결과 값을 반환하는 기능입니다. 계산이나 데이터 처리와 같은 용도로 사용됩니다.
  • 매개변수와 반환 값: Function 프로시저는 입력 매개변수를 받을 수 있고, 결과 값을 반환할 수 있습니다. Sub 프로시저는 매개변수를 받을 수 있지만 반환 값이 없습니다.
VBA 기본 문법
Dim 변수이름 As 데이터 형식
  • Dim : 변수를 할당하는 문으로 필수 입력 항목입니다.
  • 변수 이름 : 사용자가 임의로 지정한 변수 이름으로 필수 입력 항목입니다.
  • As : 절(節)이라고 하며 선택 입력 항목입니다. As 절이 사용되면 반드시 데이터 형식이 지정되어야 하고 As 절이 생략되면 데이터 형식은 Variant(기본값)가 됩니다.
  • 데이터 형식 : 데이터의 형식을 지정하며, 선택 입력 항목입니다. As 절이 사용되면 반드시 지정해야 합니다.

변수 선언
Dim 문 사용

Integer
정수형 데이터 타입

Long
큰 정수형 데이터 타입

String
문자열 데이터 타입

Boolean
참/거짓 데이터 타입
VBA SCRIPT
Sub 처음만드는SUB프로시저() Dim 변수1 As String 변수1 = "홍길동" MsgBox "안녕하세요? " & 변수1 & "님" MsgBox "안녕하세요? " + 변수1 + "님" End Sub
Sub variableFirstDemo() Dim 변수1 As Long Dim 변수2 As String Dim 변수3 As String 변수1 = 20 변수2 = "홍길동" 변수3 = 변수2 & "님의 나이는 " & 변수1 & "세 입니다" MsgBox 변수3 End Sub
Sub variableSecondDemo() Dim 변수1 As Long 변수1 = 20 Dim 변수2 As String 변수2 = "홍길동" Dim 변수3 As String 변수3 = 변수2 & "님의 나이는 " & 변수1 & "세 입니다" MsgBox 변수3 End Sub
VBA 상수
  1. 상수란? 변화하지 않는 값을 가진 데이터 유형. 프로그램 실행 중 값이 변경되지 않음.
  1. 상수 선언 키워드 Const 사용, Const 상수명 As 데이터형식 = 값.
  1. 상수 대표 예 PI = 3.14159, True = -1, False = 0 등 대표적인 상수 예시.
  1. 상수 활용 반복적으로 사용되는 값을 상수로 정의하면 편리하게 관리 가능.
  1. 상수의 장점 코드 가독성 향상, 오류 방지, 유지보수성 향상.
VBA SCRIPT
Sub 상수예제() Const 상수1 As String = "홍길동" MsgBox "안녕하세요? " & 상수1 & "님" End Sub
Sub 상수미사용() 원주 = 3.141592654 * 10 * 2 원넓이 = 3.141592654 * 10 * 10 End Sub
Sub 상수사용() Const 파이 As Double = 3.141592654 원주 = 파이 * 10 * 2 원넓이 = 파이 * 10 * 10 End Sub
Sub 상수사용() Const 파이 As Double = 3.141592654 원주 = 파이 * 10 * 2 원넓이 = 파이 * 10 * 10 파이 = 3.14 End Sub
Public Const 파이 As Double = 3.141592654 Sub 상수사용() Dim 원주 As Double Dim 원넓이 As Double 원주 = 파이 * 10 * 2 원넓이 = 파이 * 10 * 10 End Sub
'전역변수/Const가 붙으면 전역상수 Public 파이 As Double Sub 상수사용3() '파이 = 3.14 Debug.Print "상수사용3" Debug.Print 파이 End Sub Sub 상수사용4() 파이 = 3.14 Debug.Print "상수사용4" Debug.Print 파이 End Sub
지정문
지정문(Assignment Statement)은 변수나 상수에 특정 값을 할당하거나 수식을 정의하는 문으로 Set 문과 Let 문, LSet 문이 있습니다.
Let 문
식의 값을 변수 또는 속성에 지정하는 경우에 사용하며 생략이 가능합니다.(보통 생략) 현재 셀에 '안녕하세요?'를 입력하는 구문은 다음과 같습니다.
Sub letDemo() ActiveCell.Value = "안녕하세요?" Let ActiveCell.Value = "안녕하세요?" End Sub
Set 문
변수에 개체를 참조하도록 할당하는 경우에 사용하며, 변수는 Object 형식으로 선언합니다. Set 키워드는 Let 키워드와 달리 필수적으로 사용해야 합니다. Set 문은 보통 Workbook, Worksheet, Range 등 통합 문서와 관련된 부분에 많이 사용됩니다.
1) 통합문서를 참조하는 방법
```vba Dim wb As Workbook Set wb = Workbooks("Book1.xlsx")
'Book1.xlsx' 라는 통합 문서를 변수 'wb'에 할당합니다.
2) 워크시트를 참조하는 방법
Dim wb As Workbook Dim sht As WorkSheet Set wb = Workbooks("Book1.xlsx") Set sht = wb.Sheets("Sheet1")
'Book1.xlsx' 통합 문서에 있는 'Sheet1' 이라는 워크시트를 변수 'sht'에 할당합니다.
3) 범위를 참조하는 방법
Dim wb As Workbook Dim sht As WorkSheet Dim rngDb As Range Set wb = Workbooks("Book1.xlsx") Set sht = wb.Sheets("Sheet1") Set rngDb = sht.Range("A1:A10")
'Book1.xlsx' 통합 문서에 있는 'Sheet1' 워크시트의 'A1:A10' 범위를 변수 'rngDb'에 할당합니다.
Set 문으로 할당한 개체를 해제하는 방법은 다음과 같고 이전에 참조된 개체에 연결된 모든 시스템과 메모리 리소스를 해제합니다.
Set wb = Nothing Set sht = Nothing Set rngDb = Nothing
Sub SetExample() ' Worksheet 객체를 변수에 할당 ' 여기서 우리는 'Sheet1'과 'Sheet2'를 선택해서 ws와 ws2라는 변수에 저장할 거예요. Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") Dim ws2 As Worksheet Set ws2 = ThisWorkbook.Sheets("Sheet2") ' 변수 ws를 사용하여 셀 A1의 값을 변경 ' ws는 'Sheet1'을 가리키니까, 'Sheet1'의 A1 셀에 "Hello, World!"라고 쓸 거예요. ws.Range("A1").Value = "Hello, World!" ' 다른 셀의 값을 변경 ' 이번에는 'Sheet1'의 B1 셀에 "VBA Set Example"이라고 쓸 거예요. ws.Range("B1").Value = "VBA Set Example" ' 변수 ws2를 사용하여 셀 A1의 값을 변경 ' ws2는 'Sheet2'를 가리키니까, 'Sheet2'의 A1 셀에 "Hello, World!"라고 쓸 거예요. ws2.Range("A1").Value = "Hello, World!" ' 다른 셀의 값을 변경 ' 이번에는 'Sheet2'의 B1 셀에 "VBA Set Example"이라고 쓸 거예요. ws2.Range("B1").Value = "VBA Set Example" ' 객체 해제 (Optional, 권장) ' 마지막으로, 우리가 사용한 ws와 ws2를 더 이상 사용하지 않겠다고 선언하는 거예요. Set ws = Nothing Set ws2 = Nothing End Sub
조건문 (1)
1
If-Then 구문
단일 조건 처리
2
If-Then-Else 구문
두 가지 경우 처리
3
ElseIf 사용
여러 조건 처리
VBA SCRIPT
# VBA 조건문 예제 ## 1. If-Then 구문 (단일 조건 처리) Sub IfThenExample() Dim number As Integer number = 10 If number > 5 Then MsgBox "숫자가 5보다 큽니다." End If End Sub
2. If-Then-Else 구문 (두 가지 경우 처리)
Sub IfThenElseExample() Dim score As Integer score = 75 If score >= 60 Then MsgBox "합격입니다." Else MsgBox "불합격입니다." End If End Sub
3. ElseIf 사용 (여러 조건 처리)
Sub ElseIfExample() Dim grade As String grade = "B" If grade = "A" Then MsgBox "우수한 성적입니다." ElseIf grade = "B" Then MsgBox "좋은 성적입니다." ElseIf grade = "C" Then MsgBox "평균적인 성적입니다." Else MsgBox "노력이 필요합니다." End If End Sub
조건문(2) - Select Case 문
Select Case 문은 If-Then-ElseIf 문보다 더 간결하게 여러 조건을 처리할 수 있습니다.
  1. 기본 문법: 조건 값을 Case 문 안에서 하나씩 비교하여 일치하는 경우 해당 코드 블록을 실행합니다.
  1. 범위 지정: Case 문에서 범위를 지정하여 여러 조건을 한번에 처리할 수 있습니다.
  1. 기본 처리: 모든 Case 조건에 해당하지 않을 경우 기본 처리를 할 수 있습니다.
VBA SCRIPT
SELECT CASE 문을 사용하는 몇 가지 예제를 만들어 드리겠습니다.
SELECT CASE 문은 여러 조건을 처리할 때 유용하며, IF-THEN-ELSE 문의 대안으로 사용될 수 있습니다.
1. 간단한 성적 평가
Sub 성적평가() Dim 점수 As Integer Dim 등급 As String 점수 = CInt(InputBox("점수를 입력하세요 (0-100):")) Select Case 점수 Case 90 To 100 등급 = "A" Case 80 To 89 등급 = "B" Case 70 To 79 등급 = "C" Case 60 To 69 등급 = "D" Case Else 등급 = "F" End Select MsgBox "당신의 등급은 " & 등급 & "입니다." End Sub
2. 요일에 따른 메시지
Sub 요일메시지() Dim 요일 As Integer Dim 메시지 As String 요일 = Weekday(Date) Select Case 요일 Case 1 메시지 = "일요일입니다. 편안한 주말 보내세요." Case 2 To 6 메시지 = "평일입니다. 열심히 일하세요!" Case 7 메시지 = "토요일입니다. 즐거운 주말 되세요." End Select MsgBox 메시지 End Sub
3. 월별 계절 표시
Sub 계절확인() Dim 월 As Integer Dim 계절 As String 월 = Month(Date) Select Case 월 Case 3 To 5 계절 = "봄" Case 6 To 8 계절 = "여름" Case 9 To 11 계절 = "가을" Case Else 계절 = "겨울" End Select MsgBox "현재 계절은 " & 계절 & "입니다." End Sub
이러한 예제들은 SELECT CASE 문의 다양한 사용 방법을 보여줍니다:
  1. 범위 지정 (예: Case 90 To 100)
  1. 여러 값 처리 (예: Case 2 To 6)
  1. 기본값 처리 (Case Else)
SELECT CASE 문은 코드를 더 읽기 쉽고 유지보수하기 쉽게 만들어 줍니다, 특히 여러 조건을 처리해야 할 때 유용합니다.
반복문
For Next 루프
지정된 횟수만큼 반복
Do While 루프
조건이 참인 동안 반복
용도
데이터 처리 및 자동화에 필수
VBA SCRIPT
# VBA 반복문 예제 ## 1. For Next 루프 (지정된 횟수만큼 반복) ```vba Sub ForNextExample() Dim i As Integer For i = 1 To 5 Debug.Print "반복 횟수: " & i Next i ' 결과: ' 반복 횟수: 1 ' 반복 횟수: 2 ' 반복 횟수: 3 ' 반복 횟수: 4 ' 반복 횟수: 5 End Sub
2. Do While 루프 (조건이 참인 동안 반복)
Sub DoWhileExample() Dim counter As Integer counter = 1 Do While counter <= 5 Debug.Print "현재 카운터: " & counter counter = counter + 1 Loop ' 결과: ' 현재 카운터: 1 ' 현재 카운터: 2 ' 현재 카운터: 3 ' 현재 카운터: 4 ' 현재 카운터: 5 End Sub
3. 용도: 데이터 처리 및 자동화 예제
Sub ProcessCells() ' 셀을 가리키는 변수 cell을 선언합니다. Dim cell As Range ' 합계를 저장할 변수를 선언합니다. 초기값은 0입니다. Dim total As Double ' A1부터 A10까지의 범위 내 각 셀을 순회하며 합계를 계산합니다. For Each cell In Range("A1:A10") ' 셀의 값이 숫자인지 확인합니다. If IsNumeric(cell.Value) Then ' 셀의 값이 숫자라면, total에 그 값을 더합니다. total = total + cell.Value End If Next cell ' 계산된 합계를 메시지 박스로 보여줍니다. MsgBox "A1:A10 범위의 숫자 합계: " & total End Sub
이 예제들은 VBA에서 반복문을 사용하는 기본적인 방법을 보여줍니다. For Next 루프는 정해진 횟수만큼 반복할 때 유용하고, Do While 루프는 특정 조건이 만족되는 동안 계속 반복해야 할 때 사용됩니다. 마지막 예제는 Excel 셀을 순회하며 데이터를 처리하는 실제 사용 사례를 보여줍니다.
```
이러한 반복문들은 데이터 처리, 계산 자동화, 보고서 생성 등 다양한 엑셀 작업을 자동화하는 데 필수적입니다.
메시지 박스와 입력 박스
MsgBox 함수
사용자에게 정보 표시 및 확인
InputBox 함수
사용자로부터 입력 받기
VBA SCRIPT
1. MsgBox 함수 (사용자에게 정보 표시 및 확인)
Sub MsgBoxExample() Dim result As VbMsgBoxResult ' 기본 메시지 박스 MsgBox "안녕하세요, VBA 입니다!" ' 제목이 있는 메시지 박스 MsgBox "작업이 완료되었습니다.", vbInformation, "작업 완료" ' 선택 옵션이 있는 메시지 박스 result = MsgBox("계속하시겠습니까?", vbYesNo + vbQuestion, "확인") If result = vbYes Then MsgBox "예를 선택하셨습니다." Else MsgBox "아니오를 선택하셨습니다." End If End Sub
2. InputBox 함수 (사용자로부터 입력 받기)
Sub InputBoxExample() Dim userInput As String ' 기본 입력 박스 userInput = InputBox("이름을 입력하세요:") If userInput <> "" Then MsgBox "안녕하세요, " & userInput & "님!" Else MsgBox "이름을 입력하지 않으셨습니다." End If End Sub
3. 예제: 사용자 입력 받아 처리하기
Sub ProcessUserInput() Dim age As Integer Dim inputStr As String ' 사용자로부터 나이 입력 받기 inputStr = InputBox("나이를 입력하세요:", "나이 입력") ' 입력값이 숫자인지 확인 If IsNumeric(inputStr) Then age = CInt(inputStr) ' 문자열을 정수로 변환 ' 나이에 따른 메시지 출력 If age < 20 Then MsgBox "당신은 청소년입니다.", vbInformation, "나이 확인" ElseIf age >= 20 And age < 60 Then MsgBox "당신은 성인입니다.", vbInformation, "나이 확인" Else MsgBox "당신은 어르신입니다.", vbInformation, "나이 확인" End If Else MsgBox "올바른 나이를 입력하지 않았습니다.", vbExclamation, "오류" End If End Sub
실습 - 간단한 매크로 작성

1

과제
사용자 입력을 받아 특정 범위에 값 채우기

2

구현
InputBox로 입력 받고 For 루프로 채우기

3

테스트
매크로 실행 및 결과 확인
Range, Cells, Worksheets 객체 (1)
Range 객체
특정 셀 범위 지정
Cells 객체
개별 셀 접근
Worksheets 객체
워크시트 관리
Range, Cells, Worksheets 객체 (2)

1

객체 참조 방법
다양한 방식으로 셀과 워크시트 접근

2

예제 코드
각 객체를 사용한 셀 접근 방법

3

실제 활용
데이터 처리 및 시트 관리에 사용
셀 값 읽고 쓰기 (1)
Range/Cells로 값 읽기
셀 내용 가져오기
Range/Cells로 값 쓰기
셀에 데이터 입력하기
워크시트 관리 (1)
1
새 워크시트 추가
Worksheets.Add 메서드 사용
2
워크시트 이름 변경
Name 속성 변경
3
워크시트 삭제
Delete 메서드 사용
VBA SCRIPT
1. Range 객체 (특정 셀 범위 지정)
Sub RangeExample() ' 단일 셀 참조 Range("A1").Value = "Hello" ' 여러 셀 범위 참조 Range("B1:B5").Value = 10 ' 비연속 범위 참조 Range("A1,C3,E5").Interior.Color = vbYellow ' 전체 행 또는 열 참조 Range("A:A").Font.Bold = True Range("1:1").Font.Italic = True ' 수식 사용 Range("D1").Formula = "=SUM(B1:B5)" End Sub
2. Cells 객체 (개별 셀 접근)
Sub CellsExample() Dim i As Integer ' 개별 셀 참조 (행, 열) Cells(1, 1).Value = "ID" Cells(1, 2).Value = "Name" ' 루프를 사용한 셀 채우기 For i = 2 To 10 Cells(i, 1).Value = i - 1 ' ID Cells(i, 2).Value = "Person " & (i - 1) ' Name Next i ' Cells와 Range 조합 Range(Cells(1, 1), Cells(10, 2)).Borders.LineStyle = xlContinuous End Sub
3. Worksheets 객체 (워크시트 관리)
Sub SimpleWorksheetsExample() ' 1. 새 워크시트 추가하기 Worksheets.Add MsgBox "새 워크시트가 추가되었습니다." ' 2. 워크시트 이름 변경하기 ActiveSheet.Name = "내 첫 번째 시트" MsgBox "새 워크시트의 이름이 '내 첫 번째 시트'로 변경되었습니다." ' 3. 특정 워크시트 선택하기 Worksheets("Sheet1").Select MsgBox "Sheet1이 선택되었습니다." ' 4. 선택된 워크시트에 데이터 입력하기 Range("A1").Value = "안녕하세요!" Range("A2").Value = "VBA 배우기" MsgBox "A1과 A2 셀에 텍스트가 입력되었습니다." ' 5. 모든 워크시트 이름 보여주기 Dim sheetNames As String Dim ws As Worksheet For Each ws In Worksheets sheetNames = sheetNames & ws.Name & vbNewLine Next ws MsgBox "현재 워크북의 모든 워크시트:" & vbNewLine & sheetNames ' 6. 마지막 워크시트 선택하기 Worksheets(Worksheets.Count).Select MsgBox "마지막 워크시트가 선택되었습니다." End Sub
실습 - 데이터 자동 입력 매크로

1

과제
특정 패턴으로 데이터 자동 입력하기

2

구현
For 루프와 Cells 객체 활용

3

테스트
다양한 입력 값으로 매크로 실행
사용자 정의 함수
Function 프로시저
사용자 정의 함수 생성 방법
매개변수
함수에 데이터 전달
반환 값
함수 결과 반환
VBA SCRIPT
  • 덧셈 함수:
Function 덧셈(a As Integer, b As Integer) As Integer 덧셈 = a + b End Function
  • 인사말 함수:
Function 인사말(이름 As String) As String 인사말 = "안녕하세요, " & 이름 & "님!" End Function
  • 원의 넓이를 계산하는 함수:
Function 원의넓이(반지름 As Double) As Double 원의넓이 = 3.14 * 반지름 * 반지름 End Function
  • 합격 여부를 판단하는 함수:
Function 합격여부(점수 As Integer) As String If 점수 >= 60 Then 합격여부 = "합격" Else 합격여부 = "불합격" End If End Function
  • 함수들을 테스트하는 Sub 프로시저:
Sub 함수테스트() ' 덧셈 함수 테스트 MsgBox "5 + 3 = " & 덧셈(5, 3) ' 인사말 함수 테스트 MsgBox 인사말("홍길동") ' 원의넓이 함수 테스트 MsgBox "반지름이 5인 원의 넓이: " & Round(원의넓이(5), 2) & " 제곱단위" ' 합격여부 함수 테스트 MsgBox "75점은 " & 합격여부(75) MsgBox "45점은 " & 합격여부(45) End Sub
  1. 덧셈 함수: 두 개의 정수를 매개변수로 받아 그 합을 반환합니다.
  • 매개변수: 두 개의 Integer 타입
  • 반환 값: Integer 타입
  1. 인사말 함수: 이름을 매개변수로 받아 인사말 문자열을 반환합니다.
  • 매개변수: 하나의 String 타입
  • 반환 값: String 타입
  1. 원의넓이 함수: 반지름을 매개변수로 받아 원의 넓이를 계산하여 반환합니다.
  • 매개변수: 하나의 Double 타입
  • 반환 값: Double 타입
  1. 합격여부 함수: 점수를 매개변수로 받아 합격 여부를 문자열로 반환합니다.
  • 매개변수: 하나의 Integer 타입
  • 반환 값: String 타입
  1. 함수테스트 Sub: 위에서 정의한 모든 함수를 테스트합니다. 이 Sub를 실행하면 각 함수의 결과를 메시지 박스로 확인할 수 있습니다.
이 예제를 통해 학생들은:
  • 함수를 정의하는 방법
  • 매개변수를 사용하는 방법
  • 다양한 데이터 타입을 다루는 방법
  • 함수에서 값을 반환하는 방법
  • 조건문을 함수 내에서 사용하는 방법
  • 함수를 호출하고 그 결과를 사용하는 방법
오류 처리

1

On Error 문
오류 발생 시 처리 방법 지정

2

주요 오류 코드
자주 발생하는 VBA 오류 소개

3

예제 코드
오류 처리가 포함된 함수 작성
VBA SCRIPT
  • 오류 무시 예제:
Sub 간단한오류무시() On Error Resume Next Dim 결과 As Integer 결과 = 10 / 0 ' 0으로 나누기 오류 If Err.Number <> 0 Then MsgBox "오류 발생: " & Err.Description Else MsgBox "결과: " & 결과 End If End Sub
  • 오류 발생 시 특정 코드로 이동:
Sub 오류시이동() On Error GoTo 오류처리 Dim 숫자 As Integer 숫자 = CInt("ABC") ' 문자를 숫자로 변환 시도 MsgBox "변환 성공: " & 숫자 Exit Sub 오류처리: MsgBox "숫자 변환 실패!" End Sub
  • 존재하지 않는 시트 접근 오류 처리:
Sub 시트접근오류() On Error Resume Next Dim 시트 As Worksheet Set 시트 = ThisWorkbook.Sheets("존재하지않는시트") If 시트 Is Nothing Then MsgBox "시트를 찾을 수 없습니다." Else MsgBox "시트를 찾았습니다." End If End Sub
  • 사용자 정의 오류 발생:
Sub 사용자정의오류() On Error GoTo 오류처리 Dim 나이 As Integer 나이 = InputBox("나이를 입력하세요:") If 나이 < 0 Then Err.Raise Number:=1000, Description:="나이는 음수일 수 없습니다." End If MsgBox "입력한 나이: " & 나이 Exit Sub 오류처리: MsgBox "오류 발생: " & Err.Description End Sub
이 예제들은 각각 다른 오류 처리 방식을 보여줍니다:
  1. 오류를 무시하고 계속 실행
  1. 오류 발생 시 특정 코드로 이동
  1. 오류 발생 여부를 확인하여 처리
  1. 사용자 정의 오류 발생 및 처리
VBA에서 엑셀 기본 함수 활용하기
VBA에서는 대부분의 엑셀 기본 함수를 직접 사용할 수 있습니다.
WorksheetFunction 객체를 통해 이러한 함수들에 접근할 수 있습니다. 이를 활용하면 다양한 계산과 분석을 VBA 코드에서 수행할 수 있습니다.
VBA에서 엑셀 기본 함수 활용하기
1. 엑셀 데이터 준비
먼저, 다음과 같이 Sheet1에 데이터를 입력합니다:
2. VBA 코드 예제
Sub ExcelFunctionsInVBA() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' SUM 함수 사용 Dim total As Double total = Application.WorksheetFunction.Sum(ws.Range("A1:A10")) ' AVERAGE 함수 사용 Dim avg As Double avg = Application.WorksheetFunction.Average(ws.Range("B1:B10")) ' VLOOKUP 함수 사용 Dim lookupValue As Variant lookupValue = Application.WorksheetFunction.VLookup("Cherry", ws.Range("D1:E5"), 2, False) ' 결과 출력 MsgBox "A열 합계: " & total & vbNewLine & _ "B열 평균: " & avg & vbNewLine & _ "Cherry의 색상: " & lookupValue End Sub
3. 코드 설명
  1. SUM 함수: A1부터 A10까지의 숫자를 모두 더합니다. (예상 결과: 325)
  1. AVERAGE 함수: B1부터 B10까지 숫자의 평균을 계산합니다. (예상 결과: 42.5)
  1. VLOOKUP 함수: D1:E5 범위에서 "Cherry"를 찾아 해당 행의 두 번째 열(E열) 값을 반환합니다. (예상 결과: "보라")
4. 실행 방법
  1. 위의 데이터를 엑셀 Sheet1에 입력합니다.
  1. Alt + F11을 눌러 VBA 편집기를 엽니다.
  1. 새 모듈을 삽입하고 위의 코드를 붙여넣습니다.
  1. F5 키를 눌러 코드를 실행합니다.
5. 예상 결과
코드 실행 후 다음과 같은 메시지 상자가 나타납니다:
A열 합계: 325 B열 평균: 42.5 Cherry의 색상: 보라
ChatGPT API를 통한 Excel 활용
ChatGPT API로 Excel 데이터 분석하기

1

데이터 정제
ChatGPT API를 활용하여 데이터의 오류와 결측치를 식별하고 정제할 수 있습니다.

2

데이터 분석
API를 통해 데이터의 통계, 추세 분석 등 심도 있는 분석을 수행할 수 있습니다.

3

결과 해석
API가 분석 결과를 이해하기 쉬운 방식으로 제공하여 의사결정에 활용할 수 있습니다.
Excel 보고서 생성을 위한 ChatGPT API 활용
자연어 보고서 생성
ChatGPT API를 활용하여 데이터를 분석하고 보고서를 자동으로 생성할 수 있습니다.
템플릿 기반 보고서
API를 활용하여 사용자 맞춤형 보고서 템플릿을 생성할 수 있습니다.
전문적인 문서 작성
ChatGPT API로 보고서의 문안을 작성하여 전문성을 높일 수 있습니다.
OpenAI PlatForm

platform.openai.com

OpenAI Platform

Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.

OpenAI API 발급받기
OpenAI 사이트에 들어가면 API key를 발급받을 수 있다.
JSON 소개
JSON (JavaScript Object Notation)은 경량 데이터 교환 형식으로, 사람이 읽고 쓰기 쉬우며 기계가 구문 분석하고 생성하기 쉽습니다.
JSON 구조
JSON의 주요 구성 요소는 다음과 같습니다:
  • 객체: 중괄호 {}로 묶인 키/값 쌍의 모음.
  • 배열: 대괄호 []로 묶인 값의 순서 있는 목록.
JSON 문법 규칙
JSON의 기본 문법은 다음과 같습니다:
  • 데이터는 키/값 쌍으로 표현됩니다.
  • 키는 큰따옴표로 묶인 문자열이어야 합니다.
  • 값은 문자열, 숫자, 객체, 배열, true, false, 또는 null일 수 있습니다.
예시
{ "name": "John", "age": 30, "isStudent": false, "courses": ["Math", "Science"], "address": { "city": "New York", "zipcode": "10001" } }
JSON 데이터 타입
JSON에서 사용되는 데이터 타입은 다음과 같습니다:
  • 문자열: "Hello, World!"
  • 숫자: 123, 45.67
  • 객체: {"key": "value"}
  • 배열: ["value1", "value2"]
  • 불리언: true, false
  • : null
JSON과 XML 비교
JSON과 XML의 주요 차이점은 다음과 같습니다:
  • JSON은 더 가볍고 간결합니다.
  • JSON은 읽고 쓰기 더 쉽습니다.
  • JSON에는 종료 태그가 없습니다 (XML과 달리).
  • JSON은 구문 분석 성능이 더 좋습니다.
JSON의 일반적인 사용 사례
JSON은 웹 개발에서 다음과 같은 용도로 자주 사용됩니다:
  • API 응답
  • 설정 파일
  • 데이터 저장 및 교환
예시
  • REST API
  • AJAX 호출
JavaScript에서 JSON 파싱
JavaScript에서 JSON을 파싱하는 방법은 다음과 같습니다:
  • JSON.parse(): JSON 문자열을 JavaScript 객체로 변환.
  • JSON.stringify(): JavaScript 객체를 JSON 문자열로 변환.
예시
const jsonString = '{"name": "John", "age": 30}'; const jsonObject = JSON.parse(jsonString); console.log(jsonObject.name); // 출력: John
JSON의 장점
JSON의 주요 장점은 다음과 같습니다:
  • 사람이 읽기 쉬움
  • 경량 및 간결함
  • 파싱이 쉬움
  • 언어 독립적
결론
JSON은 데이터 교환을 위한 인기 있고 효율적인 형식입니다. 웹 개발 및 다양한 응용 프로그램에서 널리 사용되며, 단순성과 가독성 덕분에 XML보다 선호됩니다.
VBA SCRIPT
Option Explicit ' API 키와 URL을 상수로 정의 Private Const API_KEY As String = "APIKEY 입력" '<= APIKEY 입력 Private Const API_URL As String = "https://api.openai.com/v1/chat/completions" Private Const DEFAULT_MODEL As String = "gpt-3.5-turbo" Private Const DEFAULT_MAX_TOKENS As Long = 2000 Public Function CallGPT(prompt As String, Optional temperature As Double = 0, Optional maxTokens As Long = DEFAULT_MAX_TOKENS) As String On Error GoTo ErrorHandler If Trim(prompt) = "" Then CallGPT = "" Exit Function End If Dim headers As Variant headers = Array( _ Array("Content-Type", "application/json"), _ Array("Authorization", "Bearer " & API_KEY) _ ) Dim requestBody As String requestBody = CreateRequestBody(prompt, temperature, maxTokens) Dim response As String response = SendHttpRequest(API_URL, requestBody, headers, "POST") If InStr(1, response, """error"":") = 0 Then Dim convertedText As String convertedText = ExtractContentFromJSON(response) ' JSON 이스케이프 문자 처리 convertedText = Replace(convertedText, "\""", """") ' 큰따옴표 convertedText = Replace(convertedText, "\n", vbNewLine) ' 줄바꿈 convertedText = Replace(convertedText, "\r", vbNewLine) ' 캐리지 리턴 convertedText = Replace(convertedText, "\t", vbTab) ' 탭 convertedText = Replace(convertedText, "\/", "/") ' 슬래시 'Debug.Print "convertedText: " & convertedText CallGPT = convertedText Else CallGPT = "#Error: " & ExtractErrorMessage(response) End If Exit Function ErrorHandler: CallGPT = "#Error: " & Err.Description End Function ' 셀 서식을 지정하는 별도의 서브루틴 Public Sub FormatGPTResultCell(cell As Range) With cell .Font.Italic = True .Font.Size = 10 .WrapText = True ' 텍스트 줄바꿈 설정 End With ' AutoFit 적용 cell.EntireRow.AutoFit cell.EntireColumn.AutoFit End Sub Public Function CallGPTList(prompt As String, Optional temperature As Double = 0, Optional maxTokens As Long = DEFAULT_MAX_TOKENS) As Variant Dim response As String Dim lines() As String Dim result() As Variant Dim i As Long ' CallGPT 함수를 사용하여 응답 얻기 response = CallGPT(prompt, temperature, maxTokens) ' 응답을 줄 단위로 분리 lines = Split(response, vbLf) ' 결과 배열 크기 설정 ReDim result(1 To UBound(lines) + 1, 1 To 1) ' 각 줄을 배열에 입력 For i = LBound(lines) To UBound(lines) result(i + 1, 1) = Trim(lines(i)) Next i ' 결과 반환 CallGPTList = result End Function ' HTTP 요청을 보내는 함수 Private Function SendHttpRequest(url As String, body As String, headers As Variant, method As String) As String Dim http As Object Set http = CreateObject("MSXML2.ServerXMLHTTP") http.Open method, url, False Dim header As Variant For Each header In headers http.setRequestHeader header(0), header(1) Next header http.send body SendHttpRequest = http.responseText End Function ' 요청 본문(JSON) 생성 함수 Private Function CreateRequestBody(prompt As String, temperature As Double, maxTokens As Long) As String prompt = Replace(Replace(Replace(Replace(prompt, Chr(10), "\n"), Chr(13), "\n"), Chr(9), "\t"), """", "\""") CreateRequestBody = "{" CreateRequestBody = CreateRequestBody & """model"": """ & DEFAULT_MODEL & """, " CreateRequestBody = CreateRequestBody & """messages"": [{""role"": ""user"", ""content"": """ & prompt & """}], " CreateRequestBody = CreateRequestBody & """temperature"": " & temperature & ", " CreateRequestBody = CreateRequestBody & """max_tokens"": " & maxTokens CreateRequestBody = CreateRequestBody & "}" End Function ' 에러 메시지 추출 함수 Private Function ExtractErrorMessage(response As String) As String Dim jsonObject As Object Set jsonObject = ParseJsonResponse(response) If Not jsonObject Is Nothing Then If jsonObject.Exists("error") Then If jsonObject("error").Exists("message") Then ExtractErrorMessage = jsonObject("error")("message") Exit Function End If End If End If ExtractErrorMessage = "에러 메시지를 추출할 수 없습니다." End Function Function ExtractContentFromJSON(jsonText As String) As String Dim contentStart As Long Dim contentEnd As Long Dim nestLevel As Long Dim i As Long Dim char As String If Trim(jsonText) = "" Then ExtractContentFromJSON = "Error: Empty JSON string" Exit Function End If contentStart = InStr(1, jsonText, """content""", vbTextCompare) If contentStart = 0 Then ExtractContentFromJSON = "Error: 'content' key not found in JSON" Exit Function End If contentStart = InStr(contentStart + 8, jsonText, ":") + 1 ' Skip whitespace Do While Mid(jsonText, contentStart, 1) = " " contentStart = contentStart + 1 Loop If Mid(jsonText, contentStart, 1) = """" Then ' Content is a simple string contentStart = contentStart + 1 contentEnd = InStr(contentStart, jsonText, """") If contentEnd = 0 Then ExtractContentFromJSON = "Error: Closing quote for 'content' not found" Else ExtractContentFromJSON = Mid(jsonText, contentStart, contentEnd - contentStart) End If Else ' Content might be an object or array nestLevel = 1 For i = contentStart To Len(jsonText) char = Mid(jsonText, i, 1) If char = "{" Or char = "[" Then nestLevel = nestLevel + 1 ElseIf char = "}" Or char = "]" Then nestLevel = nestLevel - 1 If nestLevel = 0 Then contentEnd = i Exit For End If End If Next i If contentEnd = 0 Then ExtractContentFromJSON = "Error: Closing bracket for 'content' not found" Else ExtractContentFromJSON = Mid(jsonText, contentStart, contentEnd - contentStart) End If End If End Function ' 새로운 함수: Range를 JSON으로 변환하여 GPT에 전송 Public Function CallGPTWithRange(rng As Range, prompt As String, Optional temperature As Double = 0, Optional maxTokens As Long = DEFAULT_MAX_TOKENS) As String On Error GoTo ErrorHandler Application.EnableEvents = False Dim jsonData As String jsonData = RangeToJSON(rng) Dim fullPrompt As String fullPrompt = prompt & vbNewLine & "데이터:" & vbNewLine & jsonData 'Debug.Print fullPrompt CallGPTWithRange = CallGPT(fullPrompt, temperature, maxTokens) 'Debug.Print "CallGPTWithRange: " & CallGPTWithRange Application.EnableEvents = True Exit Function ErrorHandler: CallGPTWithRange = "#Error: " & Err.Description Application.EnableEvents = True End Function ' Range를 JSON으로 변환하는 함수 Private Function RangeToJSON(rng As Range) As String Dim row As Range, cell As Range Dim i As Long, j As Long Dim result As String Dim headers() As String ' 헤더 추출 ReDim headers(1 To rng.Columns.Count) For j = 1 To rng.Columns.Count headers(j) = rng.Cells(1, j).value Next j result = "[" ' 데이터 행 처리 For i = 2 To rng.Rows.Count If i > 2 Then result = result & "," result = result & "{" For j = 1 To rng.Columns.Count If j > 1 Then result = result & "," result = result & """" & headers(j) & """:""" & Replace(rng.Cells(i, j).value, """", "\""") & """" Next j result = result & "}" Next i result = result & "]" RangeToJSON = result End Function Sub AnalyzeSelectedData() On Error GoTo ErrorHandler 'Debug.Print "AnalyzeSelectedData" Dim sht As Worksheet Dim shtResult As Worksheet Dim rngDb As Range Dim lastRow As Long Dim prompt As String Dim result As String ' 구입목록 시트 설정 Set sht = ThisWorkbook.Sheets("구입목록") ' A열의 마지막 데이터가 있는 행 찾기 lastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).row ' A3부터 H열까지, 마지막 데이터가 있는 행까지의 범위 설정 Set rngDb = sht.Range("A3:H" & lastRow) ' GPT 분석 결과 시트 설정 (없으면 새로 만듦) On Error Resume Next Set shtResult = ThisWorkbook.Sheets("GPT 분석 결과") On Error GoTo 0 If shtResult Is Nothing Then Set shtResult = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) shtResult.Name = "GPT 분석 결과" End If ' 프롬프트 가져오기 prompt = shtResult.Range("B3").value 'Debug.Print "Prompt: " & prompt ' GPT 분석 실행 result = CallGPTWithRange(rngDb, prompt) 'Debug.Print "Result: " & result ' 결과 출력 shtResult.Range("B6").value = result MsgBox "분석이 완료되었습니다. 'GPT 분석 결과' 시트를 확인해 주세요.", vbInformation Exit Sub ErrorHandler: MsgBox "오류 발생: " & Err.Description, vbCritical End Sub Sub RunGPTList() Dim ws As Worksheet Set ws = ActiveSheet Dim prompt As String Dim temperature As Double Dim result As Variant ' B3 셀에서 프롬프트를 가져옵니다 prompt = ws.Range("B3").value ' B4 셀에서 temperature를 가져옵니다 (옵션) temperature = ws.Range("B4").value ' CallGPTList 함수를 호출합니다 result = CallGPTList(prompt, temperature) ' 결과를 B6 셀부터 출력합니다 ws.Range("B6").Resize(UBound(result), 1).value = result ' 결과 셀의 서식을 지정합니다 Dim resultRange As Range Set resultRange = ws.Range("B6").Resize(UBound(result), 1) Dim cell As Range For Each cell In resultRange FormatGPTResultCell cell Next cell MsgBox "GPT 응답이 B6에 출력되었습니다.", vbInformation End Sub Sub CallGPTButton() On Error GoTo ErrorHandler Dim ws As Worksheet Dim prompt As String Dim temperature As Double Dim result As String ' 현재 활성 워크시트 설정 Set ws = ActiveSheet ' B3 셀에서 프롬프트 가져오기 prompt = ws.Range("B3").value ' 프롬프트가 비어있는지 확인 If Trim(prompt) = "" Then MsgBox "프롬프트를 B3 셀에 입력해주세요.", vbExclamation Exit Sub End If ' B4 셀에서 temperature 값 가져오기 (옵션) If IsNumeric(ws.Range("B4").value) Then temperature = CDbl(ws.Range("B4").value) Else temperature = 0 ' 기본값 설정 End If ' CallGPT 함수 호출 result = CallGPT(prompt, temperature) ' 결과 확인 If Left(result, 6) = "#Error" Then MsgBox "GPT 분석 중 오류가 발생했습니다: " & result, vbCritical Else ' 결과를 B6 셀에 출력 ws.Range("B6").value = result MsgBox "GPT 분석이 완료되었습니다. B6 셀에서 결과를 확인하세요.", vbInformation End If Exit Sub ErrorHandler: MsgBox "오류 발생: " & Err.Description, vbCritical End Sub
Python과 Jupyter Notebook 소개
Python은 강력하고 다재다능한 프로그래밍 언어입니다. 데이터 과학, 머신러닝, 웹 개발 등 다양한 분야에서 사용됩니다. Jupyter Notebook은 Python 코드를 실행하고, 결과를 시각화하고, 문서를 작성할 수 있는 강력한 도구입니다.
Python 설치하기

1

Python 공식 웹사이트 방문
Python 공식 웹사이트(www.python.org)에서 최신 버전의 Python을 다운로드합니다.

Python.org

Download Python

The official home of the Python Programming Language

2

설치 파일 실행
다운로드한 설치 파일을 실행하고 화면의 지시에 따라 Python을 설치합니다.

3

설치 확인
설치가 완료되면 명령 프롬프트 또는 터미널에서 'py' 명령을 실행하여 동작 확인.
Jupyter Notebook 설치하기
pip 패키지 관리자 사용
명령 프롬프트 또는 터미널에서
'pip install jupyter'
명령을 실행하여 Jupyter Notebook을 설치합니다.
jupyter notebook --notebook-dir='C:\jupyter'
Jupyter Notebook 기본 사용법
1
새 노트북 생성
Jupyter Notebook을 실행하고 'New' 메뉴에서 'Python 3' 노트북을 생성합니다.
2
코드 셀 입력
코드 셀에 Python 코드를 입력하고 'Shift + Enter' 키를 눌러 코드를 실행합니다.
3
결과 출력
코드 실행 결과는 코드 셀 아래에 출력 셀에 표시됩니다.
4
마크다운 셀 사용
마크다운 셀을 사용하여 텍스트, 제목, 이미지 등을 추가하여 문서를 작성할 수 있습니다.
주피터 노트북 단축키