기초와 문법은 개나 줘버리고 외워서 쓰는 실전용 야매 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% |
- 엑셀을 실행 시키고
- 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열에 출력이 되는 형태