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

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

출처 - http://www.gamedevforever.com/331

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

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

아~주 오래전

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


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

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

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


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



  1. Sub test()  
  2.   
  3. Dim i As Integer  
  4.   
  5. i = 0  
  6.   
  7. Do While i < 30  
  8.   
  9.     i = i + 1  
  10.       
  11.     If i Mod 15 = 0 Then  
  12.         Cells(i, 1).value = "반반 무마니"  
  13.           
  14.     ElseIf i Mod 5 = 0 Then  
  15.         Cells(i, 1).value = "양념"  
  16.           
  17.     ElseIf i Mod 3 = 0 Then  
  18.         Cells(i, 1).value = "후라이드"  
  19.           
  20.     Else  
  21.         Cells(i, 1).value = i  
  22.           
  23.     End If  
  24.   
  25. Loop  
  26.   
  27.   
  28. 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 를 눌러 봅시다.

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

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


  1. Sub test()  
  2.   
  3. End Sub  

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


  1. Dim i As Integer  
  2.   
  3. i = 0  

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

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

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

이렇게 쓰면 되는데 

정수 = Integer
실수 = double

로 쓰면 됩니다.

그리고 i = 0 이라는게 있는데 이건 i 의 초기 값을 설정 해 주는 부분 입니다.
말 그대로 i 의 값은 정수 중 0으로 설정 한다는 말이죠.



  1. Do While i < 30  
  2.   
  3. Loop  


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

Do While 조건 ~ Loop

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

즉, 위 예제에서는
  1. i = i + 1  
  2.   
  3. If i Mod 15 = 0 Then  
  4.     Cells(i, 1).value = "반반 무마니"  
  5.       
  6. ElseIf i Mod 5 = 0 Then  
  7.     Cells(i, 1).value = "양념"  
  8.       
  9. ElseIf i Mod 3 = 0 Then  
  10.     Cells(i, 1).value = "후라이드"  
  11.       
  12. Else  
  13.     Cells(i, 1).value = i  
  14.       
  15. End If  


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

여기서 가장 중요한 부분은 

i = i + 1

요 부분 입니다.

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

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

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

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

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

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

그리고 


  1. If "조건 1" Then  
  2.     "값 1"  
  3. ElseIf "조건 2" Then  
  4.     "값 2"  
  5. Else  
  6.     "값 3"  
  7. End If  


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

즉, "조건 1"을 만족하면 "값 1"을,
"조건 2"를 만족하면 "값 2"를
그것도 아니면 "값 3"을 사용 하는 겁니다.

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

  1. Mod 15 = 0  
  2. Mod 5 = 0  
  3. 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는 말 그대로 값을 의미합니다.

그러니 

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


이렇게 해서 최종적으로

i는 1 ~ 30까지 적되 
3의 배수는 "후라이드"
5의 배수는 "양념"
15의 배수는 "반반 무마니"가 되고 각 내용은
i행 1열에 출력이 되는 형태

댓글

이 블로그의 인기 게시물

iOS 아이폰용 앱 개발을 위한 디자인시, 디자이너가 참고 해볼만한 사항들

스냅드래곤 기반 크롬북, ‘트로그도어’ 개발 중

[펌] '악마는 프라다를 입는다'의 진짜 명대사