방금 배운 내용을 연습하기 위해 현재 활성화된 셀에서 시작하여 10x10 체커보드(빨간색과 검은색)를 그리는 매크로를 만드는 과정을 살펴보겠습니다.
우리가 얻고자 하는 루프의 출력을 살펴보겠습니다.
다음으로 연습의 첫 번째 단계는 빈 프로시저를 만드는 것입니다.
Sub loops_exercise() Const NB_CELLS As Integer = 10 '우리가 칠하고 싶은 셀의 수 '... End Sub
열 A를 검게 만들기 위해 FOR 루프를 추가하는 것부터 시작하겠습니다(NB_CELLS 상수는 10입니다).
우리는 다음과 같은 결과를 얻어야 합니다:
코드를 살펴보겠습니다.
Sub loops_exercise() Const NB_CELLS As Integer = 10 '우리가 칠하고 싶은 셀의 수 For r = 1 To NB_CELLS 'r => 행 번호 Cells(r, 1).Interior.Color = RGB(0, 0, 0) '검은색 Next End Sub
다음 단계에서는 행 번호가 짝수인지 홀수인지에 따라 IF 명령을 사용하여 각 후속 셀을 빨간색으로 채색합니다. 보다 낮추다:
이 하위 작업을 해결하기 위한 코드는 다음과 같습니다.
Sub loops_exercise() Const NB_CELLS As Integer = 10 '우리가 칠하고 싶은 셀의 수 For r = 1 To NB_CELLS 'r => 행 번호 If r Mod 2 = 0 Then 'Mod => 나누기의 나머지입니다. Cells(r, 1).Interior.Color = RGB(200, 0, 0) '빨간색 Else Cells(r, 1).Interior.Color = RGB(0, 0, 0) '검은색 End If Next End Sub
조건 IF r Mod 2 = 0은 다음을 의미합니다. r을 2로 나눈 나머지가 0인 경우...
짝수인 행 번호만 2로 나눈 나머지가 0입니다.
10개 열에 대해 이미 작성한 루프를 실행하는 또 다른 루프를 만드는 방법입니다. 보다 낮추다:
이 하위 작업을 해결하기 위한 코드는 다음과 같습니다.
Sub loops_exercise() Const NB_CELLS As Integer = 10 '셀이 있는 10x10 체커보드 For r = 1 To NB_CELLS 'r => 행 번호 For c = 1 To NB_CELLS 'c => 열 번호 If r Mod 2 = 0 Then Cells(r, c).Interior.Color = RGB(200, 0, 0) '빨간색 Else Cells(r, c).Interior.Color = RGB(0, 0, 0) '검은색 End If Next Next End Sub
이제 두 번째 주기가 첫 번째 주기에 삽입됩니다.
다음 결과를 얻으려면 ...
바꾸다:
If r Mod 2 = 0 Then
에:
If (r + c) Mod 2 = 0 Then
이제 남은 일은 선택한 셀(A1 아님)부터 체커보드가 생성되도록 코드를 변경하는 것입니다. 아래를 참조하세요:
이를 위해 다음 코드를 작성합니다.
Sub loops_exercise() Const NB_CELLS As Integer = 10 '셀이 있는 10x10 체커보드 Dim offset_row As Integer, offset_col As Integer '=> 변수 2개 추가 '첫 번째 셀부터 시작하는 오프셋(행) = 현재 활성 셀의 행 번호 - 1 offset_row = ActiveCell.Row - 1 '첫 번째 셀부터 시작하는 오프셋(열) = 현재 활성 셀의 열 번호 - 1 offset_col = ActiveCell.Column - 1 For r = 1 To NB_CELLS '줄 번호 For c = 1 To NB_CELLS '열 번호 If (r + c) Mod 2 = 0 Then '셀(행 번호 + 추가 행 오프셋, 열 번호 + '스피커의 추가 변위) Cells(r + offset_row, c + offset_col).Interior.Color = RGB(200, 0, 0) '빨간색 Else Cells(r + offset_row, c + offset_col).Interior.Color = RGB(0, 0, 0) '검은색 End If Next Next End Sub