TOP

VBA-수업 8.2. 루프(Loops)

방금 배운 내용을 연습하기 위해 현재 활성화된 셀에서 시작하여 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