본문 바로가기
PROGRAMMING/EXCEL&ACCESS

[엑셀 VBA] 엑셀 VBA 기초 문법_문법 구조와 코드 다루기

by Hey Nary 2025. 2. 15.
728x90
반응형

 

참고하면 좋을 글 : [엑셀] 엑셀 VBA 기초 알아보기

 

엑셀 VBA(Visual Basic for Applications)는 엑셀 내에서 자동화를 수행할 수 있도록 도와주는 프로그래밍 언어입니다. 

VBA를 활용하면 반복적인 작업을 자동화하고, 사용자 지정 기능을 추가할 수 있습니다. 

이번 글에서는 엑셀 VBA 문법의 기초를 알아보겠습니다.

 

👌엑셀 VBA 코드의 구조와, 코드를 다루는 기본적인 방법을 다룹니다.

조건문, 반복문, OFFSET을 활용하는 방법은 아래 게시글을 참고해주세요.

[엑셀 VBA] 엑셀 VBA 조건문과 반복문

 

1. 엑셀 VBA 의 기본 문법 구조 

  • VBA의 구성 요소
개념 설명 예시
개체 (Object) 처리 대상이 되는 독립된 사물 Workbook, Worksheets, Chart, Cell
속성 (Property) 개체의 특성을 설정하는 요소 Name, Color, Size, Value
메서드 (Method) 개체가 수행하는 동작 Select, Add, Copy, Delete, Close
문장 (Statement) 개체와 속성 또는 개체와 메서드가 조합된 완전한 문장 (프로그램의 최소 단위) Range("A1").Value = 100
Sheets.Add

 

반응형

😎생각해보기 : VBA 편집기 팝업창에서 속성 과 메서드 는 각각 무엇일까요? (힌트 : 아이콘을 보세요)

  • VBA 코드 내 속성 아이콘 : 손
  • VBA 코드 내 메서드 아이콘 : 연두색 육각체

  • 개체/속성/메서드의 구조
    • 개체.속성=속성값
    • 개체.메서드 인수1, 인수2 ...
      • 구분기호 : 
        • 마침표(.)
        • 메서드의 인구 수분은 쉼표(,)
  • 주의할 점
    • 들여쓰기는 어떻게 해도 영향이 없습니다. 스페이스바, 탭 등등.
    • 한 문장의 코드는 반드시 한 줄로 입력되어야 합니다.
    • 주석문은 앞에 ' 을 쓰면 됩니다.
    • 매크로로 바뀐 변경점은 실행 취소가 되지 않습니다.

😎생각해보기 : 아래 코드 예시에서 개체.속성 과 개체.메서드 는 각각 어디일까요?

'주석문 : 코드 예시
Sub 데이터가공1()
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "날짜"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "습도"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "온도"
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 1), Array(10, 9)), TrailingMinusNumbers:=True
    Columns("A:C").Select
    Columns("A:C").EntireColumn.AutoFit
    Range("A1").Select
End Sub

 

😎생각해보기 : 아래 코드에서 Sheets.Count 의 정체는 뭘까요 ?

Sheets.Add after:=Sheets(Sheets.Count)

 

정답은, 속성 (Property) 입니다.

 

  • Sheets.Add → 새로운 시트를 추가하는 메서드(Method)
  • after:=Sheets(Sheets.Count) → 추가할 위치를 지정하는 named argument(명명된 인수)
    • Sheets(Sheets.Count) → Sheets 컬렉션의 마지막 시트를 의미
    • after:= → 새 시트를 마지막 시트 뒤에 추가
  • Sheets는 워크시트(또는 모든 시트)의 컬렉션
    .Count는 컬렉션에 포함된 항목 개수를 반환하는 속성
    즉, Sheets.Count는 단순히 **현재 시트의 개수를 반환하는 숫자 값(Integer)** 입니다.
    이 값이 Sheets(Sheets.Count)에 사용되면서 마지막 시트를 참조하는 역할을 하는 거죠.

    💡 정리하자면:

    Sheets.Add의 after는 인수(Argument)
    Sheets.Count는 단순한 숫자 값을 반환하는 속성(Property)
    즉, Sheets.Count 자체는 인수가 아님! 🚀

 

 

2. VBA 코드 작성 방법

VBA 코드는 엑셀의 "개발 도구" 탭에서 작성할 수 있습니다.

  1. "개발 도구" 탭에서 "Visual Basic" 버튼을 클릭합니다.
  2. "삽입" 메뉴에서 "모듈"을 선택합니다.
  3. 코드 창에 VBA 코드를 입력합니다.

 

3. 기본적인 VBA 코드의 문법 구조

VBA 코드의 기본 구조는 다음과 같습니다.

Sub 매크로이름()
    ' 여기에 실행할 코드 입력
End Sub

 

이 구조에서 Sub는 서브루틴(기능)을 정의하는 키워드이며, End Sub으로 종료됩니다.

 

Dim은 VBA에서 변수를 선언하는 키워드입니다. 예를 들어:

Dim 점수 As Integer
점수 = 80
If 점수 >= 70 Then
    MsgBox "합격입니다."
Else
    MsgBox "불합격입니다."
End If

 

이렇게 하면 숫자라는 변수를 Integer(정수형)로 선언하는 것입니다.

 

꼭 사용해야 할까?

  • 선언 없이 변수 사용 가능: VBA에서는 Dim 없이도 변수를 사용할 수 있지만, 권장되지 않습니다.

 

4. 매크로 실행하기

  1. "개발 도구" 탭에서 "매크로" 버튼을 클릭합니다.
  2. 실행할 매크로를 선택하고 "실행" 버튼을 클릭합니다.

★ VB 편집기에서 실행하기 단축키 : F5

 

5. VBA 코드 저장하기

매크로가 포함된 엑셀 파일은 .xlsm 형식으로 저장해야 합니다. 일반 .xlsx 파일로 저장하면 매크로가 삭제되므로 주의해야 합니다.

 

6. VBA 코드 수정하기 (오류 해결하기)

VBA 코드에서 오류가 나는 경우는 두 가지 있습니다.

1. 문법적인 오류 : 구문 오류. 오류가 발생한 부분이 빨간 색으로 됨. 

2. 실행 오류 : 문법적인 오류는 없지만 프로그램이 실행되며 발생하는 오류. 오류가 발생한 부분이 노랗게 마킹됨.

 

1번 오류의 경우 고치는 방법이 명확하지만, 2번 오류가 까다롭습니다.

예를 들어, 아래 매크로의 경우 문법적인 오류는 없지만 데이터 상으로 한 번에 여러 열을 변경할 수 없어 발생하는 오류입니다.

 

에러창에서 디버그를 선택합니다. 오류가 발생한 부분이 노랗게 마킹됩니다.

 

문법적인 오류는 없지만 데이터 상 오류가 발생하게 된 이유가, 노란 마킹 위에 Columns("A:C") 때문이라 아래와 같이 수정해줍니다.

이 때, 재설정 버튼을 눌러야 오류 마킹이 사라집니다.

 

 

  • 중단점 (Breakpoint)
    • 중간점 : 코드 점검할 때 사용하는 마킹. 전체 함수를 실행 시 이 중단점에서 종료합니다.
    • 중간점 형성하기 : F9 또는 사이드바 클릭.
    • 중간점이 있는 상태에서 실행 시 '디버그' 마킹이 있는 것과 마찬가지로 오류가 납니다.
    • ■ 재설정 버튼을 눌러 중간점을 해제한 후 매크로를 저장합니다.

 

728x90

9. 코드를 한 줄 씩 실행해보기

전체 코드가 아니라 오류 점검 등을 위해 한 줄씩 실행하고 싶을 때는 VBA 편집기에서 F8 을 누른다.

 

F9을 누를 때마다 실행되는 코드가 노란 마킹이 되며, 엑셀 파일도 실시간으로 변경이 됩니다.

728x90
반응형

댓글