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

VBA 유튜브 학습기 4 - IF문 + For문 (feat. 파워 문과 기획자)

재미를 쫓는 자 2021. 3. 31. 08:52
728x90

"여러분들한테 너무 많은 걸 한꺼번에 알려드리면 포기하게 되잖아." -엑사남 님-

 

네.... 맞아요.

배우는 자의 심리를 너무 잘 아시는 엑사남 님 덕분에 부담 없이 4강 달려 봅니다.

 

youtu.be/l08dQIprW9I

 

항상 엑사남 님께 감사한 마음으로 공부하고 있습니다.

 

 

 

[예제 1]

엑사남 님께서 올려 주신 예제 파일을 다운받아 공부했습니다.

 

지점_1에서 9까지 순환하면서 1월에 해당하는 값이 500미만인 셀의 글자색을 빨간색으로 바꾸고, D셀에 "저조"라고 표시하는 명령문을 알려 주신다네요.

 

느낌상으로는 함수를 어떻게 저떻게 하면 저 정도는 될 것 같은 느낌은 드는데...

뭐 어차피 함수도 되게 잘 아는 건 아니니까 VBA로 해결할 방법을 공부해 봅니다.

 

열심히 따라서 친 코드는 이렇습니다.

 

Sub test_()
     Dim i As Long

     For i = 3 To 11

          If Range("C" & i) < 500 Then
               Range("C" & i).Font.Color = 255
          End If

     Next

End Sub

 

 

[나중에 기억 못할 나를 위해 쓰는 코드 해석]

 

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

 

If Range("C" & i) < 500 Then          'C&i 셀. 즉, i가 3부터 11까지 순환하므로 C3 ~ C11이 되겠죠.

                                                그 셀의 값이 500보다 작으면

 

Range("C" & i).Font.Color = 255          '셀의 폰트 컬러는 255 컬러로 설정한다.

 

 

코드를 실행해 보면

 

 

 

이렇게 C3~C11 셀 중에 값이 500 미만인 셀의 폰트 컬러가 빨간색(255 컬러)으로 바뀌었습니다.

 

여기에 더해서 C3~C11 셀 값이 500 미만인 셀은 옆의 D열에 "저조" 라고 표시하는 코드를 추가해 봅니다.

엑사남 님 강의 4강 짬 좀 찼다고 이건 대충 어떻게 해야 할지 감이 잡히더라고요.

 

이렇게 코드를 추가하고요.

 

Sub test_()

     Dim i As Long

     For i = 3 To 11

          If Range("C" & i) < 500 Then
               Range("C" & i).Font.Color = 255
               Range("D" & i) = "저조"
          End If

     Next

End Sub

 

실행해 봅니다.

 

 

잘은 모르지만 공부하다 보니까 어떤 때는 VBA 코드들이 엑셀 함수보다 쉬운 거 같은 기분도 들어요.

아마 얕게 공부한 현재 상태라 쉽게 나불거릴 수 있는 거겠죠. ㅋㅋㅋ

 

 

[예제 2]

이번엔 세로로 말고, 가로로 데이터 나열 형식을 바꿔서도 해 봅니다.

나열 형식 바뀌니까 휘둥그레....

응용력이 0에 수렴하는 문과의 약점을 간파하신듯 🥵

 

 

............... (생각의 버퍼링)

시간 버리지 않고 선생님 설명을 들어 봅니다.

 

Sub test_()

     Dim i As Long

     For i = 2 To 11

          If Cells(3, i) < 500 Then
               Cells(3, i).Font.Color = 255
               Cells(4, i) = "저조"

          End If

     Next

End Sub

 

예제 1번에서는 Range~ 였는데 여기선 왜 Cells인지 대충 감은 오거든요.

그런데 누가 왜 이런 거냐고 물으면 설명은 못하겠어요.

전 이해한 거 같으니까 넘어가 볼게요.

 

실행하면

 

 

행, 열 구조만 바뀌었을 뿐 예제 1번과 동일한 결과를 볼 수 있습니다.

 

 

[과제]

 

아래 C3~K11 셀 중 셀의 값이 500미만인 셀의 폰트 컬러를 변경하시오.(50점)

 

 

전에 배웠던 구구단 과제의 응용편이네요.

구구단 과제 열심히 했더니 이건 어떻게 할지 바로 알겠더라고요.

내가 이걸 어떻게 할지 감을 잡다니 내 자신 너무 대견한 것.

 

Sub homework()

     Dim i As Long
     Dim j As Long

     For i = 3 To 11
          For j = 3 To 11

               If Cells(i, j) < 500 Then
                    Cells(i, j).Font.Color = 12611584
               End If

          Next
     Next

End Sub

 

위와 같이 코드를 작성하고 실행해 봤습니다.

항상 실행 전에는 확신은 없더라고요.

"이게 될까?" 하면서 실행.

 

 

휴😅

오류 날까 봐 쫄았는데 잘 되네요.

 

 

[예제 3]

 

그다음은 이렇게 도형이 Sheet 위에 널브러져 있고, 그 도형들의 컬러를 I열에 지정한 대로 바꾸는 법에 대한 건데요.

 

 

 

각 도형을 그린 다음에 이렇게 도형의 이름을 지정해 줘야 한다고 합니다.

 

 

컴활 2급에도 나오는 얘기랍니다.

저 컴활 2급있는데 왜 처음 듣죠....?

 

아무튼.... 이제라도 알았으면 됐죠, 뭐.

 

이건 어떻게 할지 감도 안 오니까 선생님을 따라 코드를 적어 봅니다.

 

Sub Test_1()

     Dim sh As Object

     For Each sh In ActiveSheet.Shapes

          If sh.Name = "타원" Then
               sh.Fill.ForeColor.RGB = Range("I3").Interior.Color

          ElseIf sh.Name = "사각형" Then
               sh.Fill.ForeColor.RGB = Range("I4").Interior.Color

          ElseIf sh.Name = "삼각형" Then
               sh.Fill.ForeColor.RGB = Range("I5").Interior.Color
          End If

     Next

End Sub

 

네... 복잡하네요?

 

복잡한데... 또 막상 한 줄, 한 줄 읽으면 VBA 코드가 마치 대화하듯 적혀 있어서 대강 이해는 가더라고요.

 

예를 들어

 

sh.Fill.ForeColor.RGB = Range("I3").Interior.Color

 

같은 경우에도 도형(sh)을 채운다(Fill) 컬러의(ForeColor) RGB값을(RGB)

뭘로?

I3 셀의(Range("I3")) 셀에 채워진 컬러로(Interior.Color)

 

이렇게 대충 해석(?)은 되더라고요. 물론 백지 위에 그냥 쓰라고 하면 못해요....

 

* Interior.Color : 셀 채우기 컬러

 

 

코드를 다 작성했다면 버튼을 눌렀을 때 매크로가 동작할 수 있도록 버튼에 매크로를 지정해 줍니다.

 

 

버튼에서 오른쪽 버튼 누르고 [매크로 지정]을 누른 다음에

 

 

 

 

작성한 VBA 이름을 연결해 주면 됩니다.

 

이렇게 하고 버튼을 누르면

 

 

이렇게 도형의 컬러가 I열 셀 컬러로 바뀌었습니다.

 

하... 오늘도 하얗게 불태웠네요. (현재 오전 8시 50분)

 

아침마다 회사에 1시간씩 일부러 일찍 와서 VBA 공부를 하고 있는데...

얼른 제 실력이 떡상해서 이걸 실무에 촤라라락 이렇게 쓰는 날이 왔으면 좋겠어요.

 

내부 엑셀 데이터 중에 개선하고 싶은 데이터들이 많거든요.

 

그럼 전 이제 일하러.....😫 

반응형