엑셀고급에 해당하는 글 1

[VBA] VBA 시작하기

Computer 관심/Excel & VBA|2020. 7. 29. 19:33
반응형

이미 엑셀로 잘 사용하고 있는데 프로그래밍적인 기능이 필요한 경우, 아마 세가지 중 하나를 선택해야만 할 것이다. 

 

1. 그냥 프로그래밍적인 기능을 포기하고 엑셀에서 기본적으로 제공되는 포뮬러만 사용한다.

2. 파이썬으로 옮기고 모든 기능들을 구현한다. 혹은 추가로 필요한 기능만 하는 파이썬 스크립트를 만든다.

3. 지금까지 잘 쓰던건 나두고 필요한 프로그래밍적인 기능만 VBA로 추가한다. 

 

파이썬으로 다 바꾸면 나중을 위해서는 좋을것이다. 실행도 빠르고 간편하고 코드도 간단하다.

필요한 기능만 파이썬으로 만들면 엑셀과 파이썬을 둘다 관리해야하는 번거로움이 생긴다.

 

그래서 생각한게 간단한건 VBA로 처리하는 것이다. 인터넷을 찾아보니 회사에 파이썬이 보안에 막혀서 VBA를 쓰는 경우도 있다고 한다.

 

(개인적으로, 만일 복잡한 코드를 만들어야한다면 그냥 파이썬을 사용하는게 더 효율적이고 빠르고 구조적으로 설계하는게 쉬울것 같다.)

 

 

 

1. 에디터 실행하기

ALT + F11 를 눌러 visual basic for applications를 실행한다.

 

 

 

2. 구조는 다음과 같다.

VBAProject
- Microsoft Excel Objects
--sheet1
--thisWorkBook

 

오른쪽 화면에는 VBAProject(파일명) 하위 요소는 Microsoft Excel Objects폴더, 그 안에 sheet1와 thisWorkBook이 있다.

또한, 오른쪽 마우스를 클릭하여 UserForm, module, class module 을 추가 할 수 있다.

 

 

 

3. 코드 작성하기

모듈을 만든 뒤 코드를 아래와 같이 작성해 본다.

Sub Cyan()
Cells.Interior.ColorIndex = 28
End Sub

 

 

 

4. 간단히 메크로를 통해 실행해보기

 

Alt + F8를 누루거나 저 Macros 아이콘을 클릭한다.

 

실행을 누르면 만들어 놓은 기능이 실행이 된다. 

참고로 모듈이 아니라 sheet object에 코드를 넣어도 되는데 이 경우 아래와 같이 이름이 나온다.

 

 

 

 

 

5. module과 sheet object 용도의 차이

아래의 코드를 보듯이 공용으로 사용될 수 있는 기능과 세부적인 로직은 모듈로 만들어 저장하고,

sheet object는 그 sheet에만 사용하는 코드와 모듈함수, 서브실행을 한다.

 

Module: DataAccess:

Function GetData(strTableName As String, strCondition1 As String) As Recordset
    'Code Related to getting data from the database'
End Function

 

Module: PopulateSheet:

Sub PopulateASheet(wsSheet As Worksheet, rs As Recordset)
    'Code to populate a worksheet '
End Function

 

Sheet: Sheet1 Code:

Sub GetDataAndPopulate()
    'Sample Code'
     Dim rs As New Recordset
     Dim ws As Worksheet
     Dim strParam As String
     Set ws = ActiveSheet
     strParam = ws.Range("A1").Value

     Set rs = GetData("Orders",strParam)

     PopulateASheet ws, rs
End Sub

Sub Button1_Click()
    Call GetDataAndPopulate
End Sub

 

6. function과 sub의 차이.

Sub로 만든 코드는 메크로를 통해 실행할 수 있다.

function으로 만든 코드는 셀에서 실행 할 수 있으며 반환값을 가져야 한다.

 

7. 저장하기

그냥 엑셀파일로 저장하게되면 만들어 놓은 메크로(기능)이 사라지게 된다. 

그러니 저장할땐 *. xlsm 로 저장해야한다.

 

 

 

댓글()