엑셀 VBA 기초강좌 2탄! 시작이 반이다! 세상에서 제일 쉬운 매크로!?

PC & IT|2020. 9. 28. 10:33
반응형

안녕하세요. 저번 강좌는 어떠셨나요? 어려우셨나요? 사실 코딩, 매크로 이러면 어렵다는 선입견 때문에 사람들의 접근성이 많이 떨어지는게 사실입니다. 하지만 어제 강좌를 보니 어? 생각보다 어렵지 않은데? 라는 생각이 드셨을거에요. VBA도 사실 영어나 일어와 같은 하나의 언어에 불과하며 그 구조만 알면 생각보다 접근은 쉽거든요. 

 

어 이게 이거구나? 이건 이거같은데? 이런식으로 말이죠. 특히나 VBA의 구조 자체가 워낙 직관적이다보니 다른 C언어나 java와 같은 언어보다는 개인적으로 쉽다고 생각합니다. 실제로 지금 java를 공부중인데 생각보다 어려워서 애를 먹고 있기에 자신있게 말씀드립니다. 아무튼 엑셀 VBA 기초강좌 2탄! 지금 한번 시작해보도록 하겠습니다.

 

2강 VBA 기초 명령어 파악하기

1. InputBox

InputBox... 지난번 강좌때 소개해드린 MsgBox와 동일하게 Box라는 명칭을 가지고 있습니다. 이것만으로도 둘은 약간의 비슷한 관계를 이루고 있다는 점을 알 수 있겠죠. InputBox역시 MsgBox와 마찬가지로 내가 원하는, 전달하고자 하는 내용을 전달받을 수 있습니다. 

 

거기에 추가로 MsgBox는 일방향통신이라고 한다면 InputBox는 쌍방향 통신이라고 볼 수 있겠습니다. 이게 무슨말이냐면 InputBox는 이름 그대로 내가 내용값을 집어 넣을 수 있습니다. InputBox안에 말이죠 일단 한번 보도록 하겠습니다.

감이 혹시 오시나요? MsgBox와는 달리 값을 입력할 수 있는 칸이 하나 마련이 되어 있죠? a라는 변수에 InputBox의 값을 대입을 해주었기 때문에 a의 값은 "안녕못해요"가 되겠죠? 이러한 InputBox역시 조건값 If문에 걸어줄 때 아주 유용하게 사용할 수 있습니다. 입력값에 따라서 작업을 진행을 한다거나 로그인, 로그아웃 기능으로도 사용할 수 있겠죠?

 

2. If

그렇다면 If란 과연 무엇인가? 뭐 사실 If라는 단어 뜻만 보더라도 어떤 명령어인지 쉽게 우리는 감을 잡을 수 있습니다. If, 만약에 라는 뜻으로 조건을 걸어주고 그 조건에 부합하다면 해당 명령을 수행하도록 해주는 조건문입니다. 그리고 1강에서 MsgBox와 연계하여 한번 소개를 해드렸었죠. 모르시겠다면 sportage96.tistory.com/7에서 확인이 가능합니다. 일단 간단한 예시를 통해서 한번 확인을 해보도록 하겠습니다.

 

 

Sub 이름()

    For a = 1 To 10
            
        If a Mod 2 = 0 Then
        
            MsgBox a
            
        End If
    
    Next
    

End Sub


이번에는 Mod라는 명령어가 하나 추가가 되었군요. Mod란 아시는 분들도 계시겠지만 나눈 후 나머지 값을 보여줍니다. 2로 나눈 나머지값이 0일 경우 즉 짝수인 경우를 잡아낼 수 있으며 배수의 값도 잡아낼 수 있습니다. 

 

그렇다면 이 If문 조건을 다양하게 줄수는 없는걸까요? 이번에는 짝수이면서도 4의 배수인 경우를 한번 잡아보도록 하겠습니다. 바로 And으로 말이죠.

 

Sub 이름() 

    For a = 1 To 10 
             
        If a Mod 2 = 0 And a Mod 4 = 0 Then 
         
            MsgBox a 
             
        End If 
     
    Next 
     

End Sub 


And의 뜻은 뭐 다들 잘 알고 계시리라고 믿습니다. 1번 조건값이 True일 경우 그리고 2번 조건값이 True일 경우 우리는 메시지박스를 통해 a라는 값을 표출하고 싶다. 라는 의미로 받아들이시면 되겠습니다. And도 있다고 한다면 Or이라고 없을까요? 한번 보도록 하죠.

Sub 이름()

    For a = 1 To 10
            
        If a Mod 2 = 0 Or a = 9 Then
        
            MsgBox a
            
        End If
    
    Next
    

End Sub


만약에 저 Or이라는 값이 And였다면 메시지박스는 뜨지 않았을것입니다. 하지만 Or(또는)이라는 명령어가 추가됨으로써 2, 4, 6 ,8 ,9, 10 이렇게 총 6가지의 숫자가 표출이 된 것을 확인 할 수 있었습니다.

 

자 그렇다면 만약에 홀수인지 짝수인지 여부를 메시지박스로 띄우고 싶다면 어떻게 해야할까요? 이 방법 역시 굉장히 간단합니다.

 

Sub 이름()

    For a = 1 To 10
            
        If a Mod 2 = 0 Then
        
            MsgBox "짝수"
            
        Else
            
            MsgBox "홀수"
        
        End If
    
    Next
    
End Sub
Sub 이름()

    For a = 1 To 10
            
        If a Mod 2 = 0 Then
        
            MsgBox "짝수"
            
        ElseIf a Mod 2 = 1 Then
            
            MsgBox "홀수"
        
        End If
    
    Next
    
End Sub

Else가 있고 ElseIf라는 명령어가 있습니다. 어쨌건간에 두 명령어의 결과값은 동일합니다. 그렇다면 Else는 무엇이고 ElseIf는 무엇일까요? 사실 이쯤 되면 그냥 딱 봐도 아시리라 및습니다. Else는 If문에 부합하지 않는 나머지 모든 경우에 명령을 수행하는 명령어입니다. 즉 a Mod 2 <>0 일 경우 그러니까 a Mod 2 = 0이 아닌 모든 경우 명령을 수행하여라. 이얘기인거죠.

 

그렇다면 ElseIf란 무엇일까요? ElseIf의 경우 혹시 a mod 2 = 0가 아닌 경우이자 a Mod 2 = 1이라는 값이 True일 경우 해당 명령을 수행하라는 명령어 입니다. 이렇게 다중조건을 걸어서 우리가 원하는 결과값을 표출해 낼 수 있습니다. 상당히 쉽죠? 어려우신가요? 어려우면 안되는데 말이죠...

 

 

3. Do, Loop

이번에는 Do, Loop문에 대해서 설명을 해드리도록 하겠습니다. Loop라는 단어의 뜻을 혹시 아시나요? 동그란 모양의 고리 뭐 이런뜻이죠. 이러한 단어의 뜻을 통해 우리는 이 Do, Loop문이 반복문이라는걸 알 수 있습니다. 그렇다면 어떻게 활용을 해야될까요? 한번 보도록 하겠습니다.

 

 

Sub 이름()
a = 0

    Do
          
        MsgBox a
        
        a = a + 1
    
    Loop

End Sub

 

이런... 끝도 없어요. 계속 돌아갑니다. 어째서 이런 결과가 초래하게 된것일까요? Do, Loop는 조건식을 따로 걸어주지 않는 이상 무한하게 계속 명령을 수행하게 됩니다. 이런 경우 Ctrl + Pause Break를 동시에 눌러주면 코드 실행이 중단이 된답니다.

 

그렇다면 이 Do, Loop에 조건식은 어떻게 걸어주어야 할까요? 우리는 If를 활용하여도 되고 While을 활용하여도 되고 Until을 활용하여도 됩니다. 경우의 수는 다양합니다. 한번 보시죠.

 

Sub 이름()
a = 0

    Do While a <= 10
          
        MsgBox a
        
        a = a + 1
    
    Loop

End Sub
Sub 이름()
a = 0

    Do Until a = 11
          
        MsgBox a
        
        a = a + 1
    
    Loop

End Sub
Sub 이름()
a = 0

    Do
          
        MsgBox a
        
        a = a + 1
        If a = 11 Then Exit Do
        
    Loop

End Sub

자 우리는 이렇게 각기 다른 3가지 방법을 통해 a가 10을 초과할 경우 Do, Loop문의 명령을 종료하라고 조건식을 걸어놓았습니다. 다 각기 다른 명령이지만 결과값은 동일한데요. 참고로 While이나 Until의 경우 Do옆이나 Loop 옆에 두어도 상관 없습니다.

 

While의 경우 'a라는 값이 10이하인 동안에만 반복 작업을 진행해' 라고 이야기 하고 있다고 보시면 되겠구요. 반대로 Until의 경우 'a라는 값이 11이 되기 전까지만 너가 반복작업을 진행해' 즉 10일때 까지만 너는 작업을 진행해야된다고 이야기하고 있다고 보시면 되겠습니다. If와 Exit Do의 경우는 뭐 설명 안드려도 아시리라 믿겠습니다.

 

Do Loop는 우리가 원하는 결과값에 도달할때까지, 도달직전까지 계속 작업하라는 조건식 반복문이라고 보시면 될거 같습니다. 즉 나는 이만큼을 원하니 너는 이만큼 일해!가 될 수 있겠죠. For문과 If문을 결합하여 사용할 수도 있겠지만 코딩을 짧게하면서도 더 광범위한 반복문을 활용하고 싶으시다면 Do, Loop문을 활용하는것도 아주 좋은 방법이라고 말씀드릴 수 있겠습니다.


코딩이란게 사실 하나의 언어를 새로 배우는것과 같아 접근성이 많이 떨어지는것이 사실입니다. 하루이틀 공부해서는 쉽게 되는 부분도 아니고요. 지속적으로 공부를 해야하며 전문성이 짙다보니 굉장히 어려운게 사실입니다. 하지만 기초적인 틀만 알고 이해한다면 우리는 충분히 오픈소스 등을 활용하여 업무에 접목시켜 업무를 간소화 할 수 있습니다.

 

항상 시작이 어렵지 시작이 반이라고 한발자국만 내딛고 나아가다보면 어느정도 이 틀에 대해서 이해하는 구간이 생길 것입니다. 그때부터 우리는 본격적으로 달려나갈 수 있겠고요. 그때까지만 여러분들 참고 버티고 이겨내시면 업무에 아주 큰 도움이 되리라 믿습니다.

320x100

댓글()