공부하는 노예/VBA(유튜브 무료 강의)

VBA 유튜브 학습기 3 - For, For each반복문 (feat. 파워 문과 기획자)

재미를 쫓는 자 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강 들으러 가겠습니다.

반응형