기획

기초와 문법은 개나 줘버리고 외워서 쓰는 실전용 야매 VBA

월하 2015. 3. 6. 10:00

안녕하세요. 달땡(월하) 입니다.


우와..... 진짜 오랜만이네요. 반성 하겠습니다. ㅋ


아~주 오래전


실무에서 쓰이는 엑셀 함수. 실전 사용법 - 엑셀 입문자용


이라는 포스팅을 한 적이 있는데

당시 결론이 "다들 vba 배우세요. vba가 짱이에요." 였죠.

그래서 VBA를 가져 왔습니다.


[죄송합니다. 이 짤방 한 번 써보고 싶었어요]




Sub test()

Dim i As Integer

i = 0

Do While i < 30

    i = i + 1
    
    If i Mod 15 = 0 Then
        Cells(i, 1).value = "반반 무마니"
        
    ElseIf i Mod 5 = 0 Then
        Cells(i, 1).value = "양념"
        
    ElseIf i Mod 3 = 0 Then
        Cells(i, 1).value = "후라이드"
        
    Else
        Cells(i, 1).value = i
        
    End If

Loop


End Sub

이게 뭐냐 하면 

  • 1부터 30까지의 숫자를 순서대로 출력 한다.
  • 단, 해당 숫자가 3의 배수일 경우 "후라이드"를 출력 한다.
  • 단, 해당 숫자가 5의 배수일 경우 "양념"을 출력 한다.
  • 단, 해당 숫자가 15의 배수일 경우 "반반 무마니"를 출력 한다.


즉, 아래와 같은걸 출력 하는거죠




근데 이걸 왜 하느냐?? 


특정 값까지의 결과를 출력하되, 조건에 따른 값의 변화를 줄 수 있다는게 중요 합니다.


간단하게 예를 들어



 

 플레이어 A

 플레이어 B

 체력

 1000 

 1000 

 공격력

 2

 10 


일때 둘이 싸우면 누가 이기는....




어.... 음.... 당연히.... B가 이기겠죠.


그렇다면 다시...



 

 플레이어 A

 플레이어 B 

 체력

 1000 

 1000 

 공격력

 2 

 10 

 치명타 확률

 10 % 

 5 % 

 치명타 배율

 200 % 

 10 % 

 체력 회복

 초당 1

 없음

 회피 확률

 10% 

  5%


이럴 경우 누가 이길지 계산을 엑셀로 하면.... 좀..... 많이.... 갑갑... 하죠.

일단 이건 나중에 알아보고 위에 vba 코드 부터 뜯어 보겠습니다.

그 전에 한번 실행이나 시켜 볼까요?

  1. 엑셀을 실행 시키고
  2. Alt + F11 을 누른 후
  3. 모듈 추가


그럼 텅 빈창이 나오는데 위의 코드를 복사하여 붙여 넣고 


F5 를 눌러 봅시다.


예쁘게 잘 나오죠? 안나오면 안되는데 ㄷㄷㄷ


그럼 잘 나온다고 치고 코드를 뜯어 보겠습니다




Sub test()

End Sub


vba 는 위와 같이 Sub ~~()로 시작 해서 End Sub로 종료 됩니다.



Dim i As Integer

i = 0


저기서 i 는 변수(변하는 수?!) 라고 하는데 vba에서 사용 하기 위해서 선언을 해줘야 합니다.


이 변수가 어떤 녀석인지, 정수인지 실수인지 알아야 하는거죠.


DIm 변수 As 정수(혹은 실수)


이렇게 쓰면 되는데 


정수 = Integer

실수 = double


로 쓰면 됩니다.


그리고 i = 0 이라는게 있는데 이건 i 의 초기 값을 설정 해 주는 부분 입니다.

말 그대로 i 의 값은 정수 중 0으로 설정 한다는 말이죠.




Do While i < 30

Loop



옙. 저게 VBA의 핵심 중 하나인 반복문 입니다.


Do While 조건 ~ Loop


이면 조건을 만족 하는 동안 아래의 내용을 계속 반복해라! 가 되는 겁니다. 아래 내용은 어디까지?  Loop 앞까지!


즉, 위 예제에서는

    i = i + 1
    
    If i Mod 15 = 0 Then
        Cells(i, 1).value = "반반 무마니"
        
    ElseIf i Mod 5 = 0 Then
        Cells(i, 1).value = "양념"
        
    ElseIf i Mod 3 = 0 Then
        Cells(i, 1).value = "후라이드"
        
    Else
        Cells(i, 1).value = i
        
    End If



요걸 계속 반복 하는 겁니다.


여기서 가장 중요한 부분은 


i = i + 1


요 부분 입니다.


제일 처음에  i = 0 으로 설정 했었죠.


그게 저 반복문 안에 들어가면 i = i + 1 의 수식을 계속 반복 하는겁니다.


언제까지? i 값이 30이 될 때 까지.


왜?  Do while i < 30 으로 반복문을 돌렸으니깐요.


다시 반복문을 살펴 봅시다.


i = i + 1 이 되었으니 i 의 값은 1이 되었습니다.


그리고 



If "조건 1" Then
    "값 1"
ElseIf "조건 2" Then
    "값 2"
Else
    "값 3"
End If



가 나왔는데 기존 엑셀의 if 함수를 반복 하는것과 같습니다.


즉, "조건 1"을 만족하면 "값 1"을,

"조건 2"를 만족하면 "값 2"를

그것도 아니면 "값 3"을 사용 하는 겁니다.


그럼 여기서 조건이 무엇이냐?


i Mod 15 = 0
i Mod 5 = 0
i Mod 3 = 0


요 세가지인데 각기 다음과 같습니다.


i / 15 한 값의 나머지가 0

i / 5 한 값의 나머지가 0

i / 3 한 값의 나머지가 0


즉, i / 15 의 나머지가 0이면 "반반 무마니"를

i / 5 의 나머지가 0이면 "양념"을

i / 3 의 나머지가 0이면 "후라이드"를 출력 하라는거죠.


어디에?


Cells(i, 1).value


즉, i 행 1열에 찍어 주라는 이야기죠.


여기서 value는 말 그대로 값을 의미합니다.


그러니 


 Cells(i, 1).value = "반반 무마니"
의 경우 i행, 1열의 값(value) = "반반 무마니" 가 되는 거죠.



이렇게 해서 최종적으로


i는 1 ~ 30까지 적되 

3의 배수는 "후라이드"

5의 배수는 "양념"

15의 배수는 "반반 무마니"가 되고 각 내용은

i행 1열에 출력이 되는 형태


가 완성이 됩니다!!

다음에 계속. 아마도.....

반응형