ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VBA 유튜브 학습기 4 - IF문 + For문 (feat. 파워 문과 기획자)
    공부하는 노예/VBA(유튜브 무료 강의) 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 공부를 하고 있는데...

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

     

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

     

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

    반응형

    댓글

Designed by Tistory.