ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VBA 유튜브 학습기 3 - For, For each반복문 (feat. 파워 문과 기획자)
    공부하는 노예/VBA(유튜브 무료 강의) 2021. 3. 30. 08:39
    728x90

    유튜버 엑사남 님 강의 3강 듣고 왔습니다!

     

    https://youtu.be/1ueDvcQBXzE

     

    걱정했던 것과 달리 아직은 할 만합니다.

     

    따라서 코드를 작성할 때는 파워 납득인데, 막상 혼자 작성하려면 108 번뇌가 찾아오긴 하지만...

    저는 아직 쪼렙이니까 일단 따라서 작성하고 이해하는 것만 해도 잘하는 거라고 정신 승리하고 있어요.🙄

     

    3강에서 공부한 내용은 For~Next와 For Each ~ Next 반복문입니다.

     

    코드를 작성하기에 앞서 짤막한 VBA 기본 지식 하나.

     

    셀을 지정하는 방식은 두 가지입니다.(몇 개 더 있을지도 몰라요. 제가 아는 게 두 가지.....)

     

    • Range("셀 주소")
    • Cells(행 번호, 열 번호)

     

    이 내용을 알아야 아래 내용이 손톱만큼이나마 더 이해가 빨리 되더라고요.

     

     

    For ~ Next

     

    1. 먼저 A열의 1행부터 9행까지. 즉, A1 셀부터 A9 셀까지를 1부터 9까지 숫자로 채우는 명령문입니다.

     

    Sub V_number()

         Dim i As Long

         For i = 1 To 9
              Cells(i,1) = i
         Next

    End Sub

     

    Cells(i,1) = i 가 이 반복문의 핵심인데요. (제 마음대로 뽑은 핵심)

    i 값. 즉, 행 번호는 For문을 돌 때마다 1부터 9까지 증가하고, 열 번호는 1로 고정됩니다.

     

    열을 1열(A열)에 고정해 두고 행 번호만 하나씩 늘려가는 거죠.

    언제까지?

    행 번호가 9가 될 때까지.

     

    그 상태에서 셀 안에 값은 뭘로 채우느냐? i 값으로 채웁니다.

    즉, 그 셀의 행 번호로 채우는 거죠.

     

    저렇게 코드를 작성하고 실행해 보면 이렇게 셀이 채워집니다.

    신기하잖아....😍

     

     

     

    2. 이번엔 행을 1행으로 고정해 두고, 열만 9번째 열까지 늘려가면서 값을 채웁니다.

    Sub H_number()

         Dim i As Long

         For i = 1 To 9
              Cells(1,i) = i
         Next

    End Sub

     

    동작 원리는 위의 1번과 동일합니다.

    다만 이번엔 행은 1행으로 고정해 두고, 열 값만 1부터 9까지 반복문을 도는 거죠.

     

    코드를 작성하고 실행하면 아래와 같이 셀이 채워집니다.

     

     

     

    중간에 과제를 내 주셔서 과제도 해 봤습니다.

     

    [과제]

    B2 셀부터 I9 셀까지 각각 각 행과 열의 값을 곱한 값이 계산돼 들어가게 하시오.(100점)

     

    사실 이렇게만 내주셨으면 사경을 헤맬 뻔했는데, 힌트를 주시더라고요. 감사🙏

    힌트를 듣고 작성해 봤습니다.

     

    Sub gugudan_()

         Dim i As Long
         Dim j As Long

         For i = 1 To 9
              For j = 1 To 9
                   Cells(i, j) = i * j
              Next
         Next

    End Sub

     

    For i = 1 To 9          'i는 1부터 9까지 순환합니다.

    For j = 1 To 9          'j는 1부터 9까지 순환합니다.

     

    Cells(i,j) = i * j          'i는 행 번호가 되고, j는 열 번호가 됩니다. 셀 안의 값은 i와 j를 곱한 값으로 채웁니다.

     

    대충 이렇게 코드를 작성하고 확신없이 긴가민가하면서 실행해 보니까

     

     

    휴ㅋㅋㅋ

    제대로 들어갔네요🤩

     

    이게 뭐라고 너무 뿌듯하더라고요.

     

    이미 머리에 약간 과부하가 온 것 같지만 For Each ~ Next 반복문도 마저 배워 봅니다.

     

     

    For each

     

    이렇게 대충 도형이 널부러져 있고, 이 도형들을 B1 셀의 왼쪽에 맞춰 정렬한 후에 도형의 컬러를 각각 다른 컬러로 바꿔 보는 예제입니다.

     

    여기까지 들었을 때 두 가지 감정이 들었어요.

     

    "와.........개어려워."

    "엑셀에서 이게 된다고?"

     

     

    궁금하니까 얼른 코드를 따라서 써 봅니다.

    음... For ~ Next까지는 그래도 대애애애애충이라도 이해하면서 따라 적었는데 여기서는 그냥 눈이 휘둥그레져서 일단 따라 적기 바빴습니다.

     

    지구에 선생님과 저 둘만 남겨진 기분.

     

    이 기분 마치 나머지 공부 [이미지 출처 : 언스플래쉬]

     

    중간에 멘붕 올 뻔했는데 For Each ~ Next만 기억하면 된다고 하셔서 다시 정신줄 잡고 진행해 봅니다.

     

    Sub Shape_color()

         Dim sh As Object
         Dim lngC As Long  '색상 값 변수

         For Each sh In ActiveSheet.Shapes  '현재 시트에 있는 도형들을 순환하라

              lngC = lngC + 1  'For문을 돌 때마다 색상 값이 1씩 증가해 각 도형은 각기 다른 색상을 띈다
              sh.Left = Range("B1").Left  'sh의 왼쪽의 위치는 B1 셀의 왼쪽의 위치와 같다
              sh.fill.ForeColor.SchemeColor = lngC

         Next

    End Sub     

     

    네....

    코드 옆에 주석 달아 놓은 대로 저런 내용의 코드라고 합니다.

     

    핵심은 For Each ~ Next니까 대강 이해하고 실행해 봅니다.

     

     

    짜라란

    헐... 너무 신기해.👀

     

    이런 엑셀의 신박한 기능들은 여직까지 모르고 살았다니 억울하기도 하고....(아직도 잘은 모름)

    이제라도 알게 해 주신 엑사남 님께 감사한 마음도 들고 그랬습니다.

     

     

    For Each ~ Next 구문에 대한 과제도 내주셨어요.

     

     

    [과제]

    위의 도형 정렬 및 컬러 채우기 결과값에 정렬된 도형들을 다시 G1 셀의 왼쪽에 맞춰 정렬하면서 각각이 가진 컬러값을 역순으로 바꾸시오. (500점)

     

    이건 오히려 구구단보단 쉽게 느껴지더라고요.

    잔머리로 살아온 짬이 있어서인지 글자 몇 개만 바꾸면 되겠구나 딱 감이 왔습니다.

     

    컬러를 어떻게 다시 역순으로 바꾸는지에 대해서는 엑사남 님께서 힌트를 주셨어요.

    힌트 없었으면 못 풀었음......

     

    Sub Shape_Color()

         Dim sh As Object
         Dim lngC As Long

         lngC = 6

         For Each sh In ActiveSheet.Shapes

              lngC = lngC - 1
              sh.Left = Range("G1").Left
              sh.Fill.ForeColor.SchemeColor = lngC

         Next

    End Sub

     

    이렇게 코드를 약간 수정해 작성하고.

    이번에도 확신 없이 떨리는 마음으로 실행해 봤습니다.

     

     

    !!!!!!!!!!!!!!!!!!!!!!!

    뿌듯

     

    그 어떤 때보다 뿌듯했습니다.

     

    이제 3강 들었는데 내일이면 세상에서 제일 복잡한 명령문을 작성할 수 있을 거 같고 그렇네요.

    자존감 회복에 큰 도움이 되는 공부인듯?

     

    저는 4강 들으러 가겠습니다.

    반응형

    댓글

Designed by Tistory.