본문 바로가기
WeekdayLife/excel vba tutorial

[엑셀VBA/초보자] 에디터 훑어보기 [1일차]

by JO_i 2024. 8. 1.

애증의 VBA 코드

언제쯤이었던가, 꽤 오래전 한 유튜브에서 VBA기초강좌 1편을 봤는데, 그걸 보자마자 든 생각은, '어렵지 않구나'라는 생각이었다. VBA는 한줄한줄씩 코드를 읽어내려가는 구조이기 때문에, 개발을 한번도 해보지 않은 사람이 사용하기 편하다. 하지만, VBA를 구글에서 검색해보면, XX년에 없어져야할 언어, 배우지말아야할 언어에 항상 상위권을 두고 있지만, 그런 컨텐츠를 본지도 어언 10여년이 되어가고 있으니, 그들의 말이 틀렸었다고 자신있게 말할 수 있다.

 

앞으로 이 글에 끄적거릴 내용들은 남을 위해서가 아니라 나를 위해서 적어두는 것이다. 유튜브에 메모차원에서 몇 가지 엑셀 영상을 올려놨는데, 공공의 공간이므로 나름 최대한 공손하게 멘트를 적었으나, 댓글이 달리는 것을 보면.... 참 가관이다. 욕을 하지 않고도, 욕이 될 수 있음을 내 일이 되니까 절감하게 된다.

 

누구한테든 도움이 되면 다행이고, 아니어도 상관없다. 그말인 즉, 내용이 친절하지 않을 수 있음에 유의해서 보길 바란다는 것이다.

셀에 값을 입력하는 엑셀VBA

TAKE #1

엑셀에서 VisualBasic Editor에 진입하는 방법은 alt + F11이다. 아래와 같은 창이 뜨게 될 것이다.

 

 

 

1. Project 창

 

그림에서 왼쪽 상단에 project 창이 있다.(위치는 변경하거나 창을 닫을수 있기 때문에 다를 수 있다.) 엑셀 파일 단위에 트리가 있음을 알 수 있다. 파일이 세개가 켜져 있다면 세개의 트리가 있을 것이다.

 

맨 위에 VBA Project는 Book1 이라는 Workbook에 하위이고, 그 밑으로 Microsoft Excel Object 라는 엑셀 시트 정보가 있다. 시트가 많아지면, 시트들이 쌓이게 되고, ThisWorkbook은 이 모든 시트를 컨트롤 할 수 있는 코드를 입력하는 역할이라고 쉽게 생각하자.

여기까지는 기본으로 주어지는 체계이고, 만약 내가 만든 모듈(module)이나 유저폼(form)을 넣고 싶다면 동일한 수준의 폴더들이 생긴다. 아래와 같은 이미지가 될 것이다.

 

 

 

2. Properties 창

프로젝트 창에서 선택한 파일이든, 시트든, 모듈이든 간에 정보가 나온다. 자질구래한 설정창이라고 보면 되겠다.

눈이 침침해서 잘 보이지 않으니 일단 그냥 넘어가도 좋다.

 

3. 코드입력창

코드를 넣는 메모장 같은 창이다. 물론, Project창에서 선택된 유형에 따라서, 코드입력창에 미세한 차이가 생긴다.

 

4. 뭐라고 할까..

코드를 실행하거나 디버깅을 할 때, 결과를 직/간접적으로 확인하는 창이다. 일단 넘어가자.

 

이제 기본은 다 익혔다. 이제 chatGPT와 코드 삽질만 하면 되는 것이다.

 

TAKE #2

insert > module을 통해 새로운 module을 생성한다.

트리를 보면 알 수 있는 것처럼 해당 모듈은 해당 workbook 하위에 귀속됨을 알 수 있다.

 

우측 코드창으로 넘어와서, 다 무시하고, 비어있는 모듈 안에다가 프로시저를 생성해본다. 프로시저는 sub 이름() 로 작성해주면 된다. 여기서는 testcode라는 이름으로 작성을 했다.

Sub testcode()



End Sub

 

 

 

아무 생각도 하지 말고, 아래 코드를 복붙한다.

 

Sub testcode()

    Application.ThisWorkbook.ActiveSheet.Range("A1").Value = "a1 cell value is inputed by myself"

End Sub

 

 

F5를 눌러서 실행해보면 A1셀에 값이 들어와 있을 것이다.

당신은 이제 엑셀 VBA를 사용하는 사람이 되었다.

 

TAKE #3

우선 한가지 알고 가자. 엑셀VBA에서 각 단위는 다음과 같다. 대략적으로만 알고 있자. 나도 정확하게는 모른다.

엑셀 프로그램 : Application

엑셀 파일 : Workbook (활성화된 엑셀 파일 : Thisworkbook)

엑셀 시트 : Worksheet (활성화된 엑셀 시트 : Activesheet)

 

위에 작성한 코드를 다시 복사해서 아래와 같이 구성해보자.

Sub testcode()

    '전부 썼다
    Application.ThisWorkbook.ActiveSheet.Range("A1").Value = "a1 cell value is inputed by myself"
    'Application 생략
    ThisWorkbook.ActiveSheet.Range("B1").Value = "b1 cell value is inputed by myself"
    'ThisWorkbook 생략
    ActiveSheet.Range("C1").Value = "a1 cell value is inputed by myself"
    'value 생략
    ActiveSheet.Range("D1") = "d1 cell value is inputed by myself"

End Sub

 

결과가 동일하다는 것을 알 수 있다. 그냥 대충 코드 쳐 넣으면, VBA가 적당히 해석해주고, 정 안되겠으면 에러가 나는 구조이므로, 많은 스트레스를 받지 않아도 된다. 그냥 엑셀 내에서 함수 치는 것과 별반 다르지 않다.

 

 

 

이제 엑셀 함수를 배울때를 기억하면서, 몇가지만 꾹 참고 구글에서 찾아낸다면, chatGPT와 함께 원하는 결과를 쉽게 만들어낼 수 있을 것이다.

그 전에 알아야할 매우매우 중요한 사실 중 하나는 엑셀VBA는 ctrl+z 로 되돌리기가 되지 않는다는 사실이다. 코드를 실행하기 전에 시트를 백업하는 습관을 가져야 한다.

 

끝.