반복문
반복문 : For/ Next
조건 반복문 : Do/ Loop
For문
For 카운터 변수 = 시작 수 To 끝 수 [step 증감값]
반복해서 처리할 내용
'For문을 강제로 나가고 싶을 때 Exit For
Next [카운터 변수]
실습 진행
- For문으로 A1부터 오른쪽으로 1칸씩 이동하며 증가하는 숫자를 기입
Sub For문연습1()
Dim a As Byte 'for문을 카운트 하기위한 카운트 변수 선언
For a = 1 To 10 Step 1 ' a가 0부터 10까지 1씩 증가하며 for문을 실행
' 반복할 구문 처리 (A1에 0을 찍고 우측으로 옮겨가며 10까지 찍기)
Range("A1").Offset(0, a).Value = a
Next a
End Sub
Sub For문연습1()
Dim a As Byte 'for문을 카운트 하기위한 카운트 변수 선언
For a = 0 To 10 Step 1 ' a가 0부터 10까지 1씩 증가하며 for문을 실행
' 반복할 구문 처리 (A1에 0을 찍고 우측으로 옮겨가며 10까지 찍기)
' Range("A1").Offset(0, a).Value = a
' 셀속성으로 동일한 처리하기
Cells(1, a + 1).Value = a
' 0일 때는 검은색, 홀수일 때는 빨간색, 짝수일 때는 파란색
' 검은색 = vbblack / 빨간색 = vbred / 파란색 = vbblue
' \몫 / mod 나머지
If (a = 0) Then '결과값이 0이라면
Cells(1, a + 1).Font.Color = vbBlack
ElseIf a Mod 2 = 0 Then '결과값이 짝수라면
Cells(1, a + 1).Font.Color = vbBlue
Else '결과값이 0이 아니고, 짝수도 아닌 홀수라면
Cells(1, a + 1).Font.Color = vbRed
End If
Next a
End Sub
For문으로 30번 루프를 돌면서 1~5사이 랜덤 돌리기
1. For문을 사용하여 30번 루프를 돈다.
2. 변수를 선언하고 루프 시마다 1~5 사이 랜덤 값을 지정한다.
3. A1부터 옆으로 이동하며 랜덤값을 찍는다
4. 랜덤값이 5가 나오면 메시지박스를 생성하고
For 문을 종료한다.
(제목 : 오에서종료 / 내용 : n번 만에 5가 나옴)
(n번은 히스토리를 찍은 횟수임)
(vbExclamation 와 vbOkOnly 사용)
5. 메시지박스를 닫으면 찍었던 값들을 삭제한다.
Sub For문연습2()
' 포문 카운트를 하기 위한 카운트 변수 선언 필요
' 랜덤을 처리하기 위한 변수 선언 필요
Dim a As Byte, b As Byte ' a : 카운트변수 / b : 랜덤 변수
' for문 영역 = 반복해서 처리해야 하는 영역
For a = 1 To 30 Step 1
' 랜덤 변수에 1~5 랜덤값 대입 처리 필요 / for 내부
b = Application.RandBetween(1, 5)
' A1 셀부터 우측으로 이동하며 값을 찍는 처리 필요 (offset이나 cells 필요)
Range("A1").Offset(0, a).Value = b '미완성 상태
' 랜덤값이 5가 나오면 for문을 강제로 종료하기
' Exit For : for문을 강제로 종료하기
If b = 5 Then
Exit For
End If
Next a
' 메시지 박스를 생성해서 몇 번만에 5가 나왔는지 알려주기
MsgBox a & "번만에 깔끔하게 클리어!"
[1:1].Value = "" ' 1번 줄 전체를 지우기
End Sub
구구단 만들기
Sub 구구단()
Dim 입력 As Byte, i As Byte
입력 = InputBox("숫자를 입력하세요.", "몇 단이 필요하신가요?")
For i = 1 To 9 Step 1
ActiveCell.Offset(i - 1, 0).Value = 입력
ActiveCell.Offset(i - 1, 1).Value = "X"
ActiveCell.Offset(i - 1, 2).Value = i
ActiveCell.Offset(i - 1, 3).Value = "="
ActiveCell.Offset(i - 1, 4).Value = 입력 * i
Next i
' 구구단이 있는 위치를 선택하는 구문
Range(ActiveCell, ActiveCell.Offset(8, 4)).Select
Selection.HorizontalAlignment = xlCenter
End Sub
살 때마다 해당 물품 가격만큼 계속 비싸지는 물건
1. For문을 사용하여 구매개수만큼 루프 돌기
2. For문 내부에서 물건 가격이 구매 개수에 따라 증가하도록 설정
3. Function 리턴 값으로 구매개수를 모두 샀을 때의 총 필요 비용을 표시
Function udf점점비싸게(물건원가, 구매갯수)
Dim 최종물건가격 As Long
Dim a As Long
For a = 1 To 구매갯수 Step 1
' 반복 처리해야 하는 구문 / 물건 가격을 누적해서 계산해주기
최종물건가격 = 최종물건가격 + 물건원가 * a
Next a
udf점점비싸게 = 최종물건가격 ' 계산된 최종 물건 가격 리턴
End Function
Do while : 조건이 맞지 않으면 한 번도 실행하지 않는다.
Do : 조건이 맞지 않아도 한 번은 시도한다.
Sub 조건반복문1()
Dim a As Byte
Do While a > 10
' 반복 구문
Cells(1, a + 1).Value = a
' 조건을 바꿔주는 구문
a = a + 1
Loop
End Sub
Sub 리스트추가()
Dim i As Integer
' 몇 칸이 채워져 있는지 확인하는 구문
Do While Range("B2").Offset(i, 0).Value <> ""
i = i + 1
Loop
Range("B2").Offset(i, 0).Value = "번호 " & i
Range("B2").Offset(i, 1).Value = "이름 " & i
Range("B2").Offset(i, 2).Value = "등급 " & i
End Sub
Do until은 Do while의 반대 형태를 가진다.
조건 반복문 실습
1. 변수 A, B, C를 선언한다.
2. 변수 A, B, C에 랜덤으로 1~5의 숫자를 대입한다.
3. 선택된 셀부터 1칸씩 우측으로 히스토리를 표시한다.
4. A, B, C가 겹치지 않을 때까지 반복한다.
5. A, B, C가 겹치지 않게 되면, 메시지 박스로 반복 횟수를 표시한다.
Sub 실습()
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim i As Byte
Dim Flag As Byte
A = Application.RandBetween(1, 5)
B = Application.RandBetween(1, 5)
C = Application.RandBetween(1, 5)
Do While Flag = 0
i = i + 1
If (A <> B And A <> C And B <> C) Then
Flag = 1
End If
If (A = B) Then
B = Application.RandBetween(1, 5)
End If
If (A = C) Then
C = Application.RandBetween(1, 5)
End If
If (B = C) Then
C = Application.RandBetween(1, 5)
End If
Loop
MsgBox A & "," & B & "," & C & ": " & i & "회만에 성공"
End Sub
'대학생활 > 수업' 카테고리의 다른 글
리얼타임엔진 11주차 - Verse 튜토리얼2 (0) | 2023.11.14 |
---|---|
게임인공지능 11주차 - Deep Learning, Logistic Classification (1) | 2023.11.14 |
게임그래픽프로그래밍심화 10주차 (0) | 2023.11.13 |
게임기획과비주얼스크립팅 9주차 - UMG, UI (0) | 2023.11.09 |
레벨디자인심화 9주차 - Spawn (0) | 2023.11.09 |