안녕하세요. 달땡(월하) 입니다.
우와..... 진짜 오랜만이네요. 반성 하겠습니다. ㅋ
아~주 오래전
실무에서 쓰이는 엑셀 함수. 실전 사용법 - 엑셀 입문자용
[죄송합니다. 이 짤방 한 번 써보고 싶었어요]
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% |
- 엑셀을 실행 시키고
- Alt + F11 을 누른 후
- 모듈 추가
그럼 텅 빈창이 나오는데 위의 코드를 복사하여 붙여 넣고
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열에 출력이 되는 형태
'기획' 카테고리의 다른 글
기초와 문법은 개나 줘버리고 외워서 쓰는 실전용 야매 VBA (6) | 2015.03.06 |
---|---|
밸런싱, 숫자의 함정 (18) | 2013.01.25 |
1 depth, 1 play, 1 rank (2) | 2012.12.11 |
게임개발에서의 스토리와 내러티브 (1) | 2012.07.23 |
게임 UX 기획 - 04. prototyping 下 (4) | 2012.06.15 |
게임 스토리와 연출 (8) | 2012.06.10 |
댓글을 달아 주세요
우어.. 엑셀도 어려운데 VBA를 배워야 하는군요.
A와 B중 누가 이길지 흥미롭습니다.
2년이나 지난 지금에도 포스팅 올려주셔서 너무나 감사드립니다.
천천히 보면서 공부할게요.
VBA가 비주얼 베이직 언어를 쓰는군요. (애초에 VB가 visual basic 약자라니; )
학교 다닐 때 잠깐 배웠는데 요긴하게 써먹었습니다.
쉽게 강의해주셔서 정말 빠르게 적응했네요.
VBA가 짱이죠. 엑셀만 잘해도 일이 무척 편한데 VBA까지 더하면 못하는게 없습니다. ㅋㅋ
DLL도 가져올수있으니 winapi까지 로드하면 천하무적!
진로 상담좀 봐주시면 감사하겠습니다.
맨 밑에 글 의대 관련입니다.
http://kblog.popekim.com/2012/04/blog-post.html
ㅋㅋㅋ 재밌게 포스팅하셨네요 잘봤습니다.
ㅋㅋㅋ 재밌게 포스팅하셨네요 잘봤습니다.