[기획|개발] 기초와 문법은 개나 줘버리고 외워서 쓰는 실전용 야매 VBA
[기획|개발] 기초와 문법은 개나 줘버리고 외워서 쓰는 실전용 야매 VBA
출처 - http://www.gamedevforever.com/331
안녕하세요. 달땡(월하) 입니다.
우와..... 진짜 오랜만이네요. 반성 하겠습니다. ㅋ
아~주 오래전
실무에서 쓰이는 엑셀 함수. 실전 사용법 - 엑셀 입문자용
이라는 포스팅을 한 적이 있는데
당시 결론이 "다들 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 코드 부터 뜯어 보겠습니다.
그 전에 한번 실행이나 시켜 볼까요?
- 엑셀을 실행 시키고
- 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 ~ 30까지 적되
3의 배수는 "후라이드"
5의 배수는 "양념"
15의 배수는 "반반 무마니"가 되고 각 내용은
i행 1열에 출력이 되는 형태
댓글
댓글 쓰기