안녕하세요, 엑셀 사용자 여러분!
오늘은 VBA를 사용해 Excel에서 반복문을 구현하는 방법에 대해 알아보겠습니다.
반복문은 프로그래밍에서 정말 중요한 개념인데요, Excel VBA에서도 이를 활용하면 작업 효율을 크게 높일 수 있답니다.

먼저 반복문이 뭔지, 그리고 왜 필요한지 간단히 살펴보고 Excel VBA에서 사용할 수 있는 여러 종류의 반복문을 하나씩 알아보겠습니다. 코드 예제도 함께 보여드릴 테니 따라해보시면 금방 익숙해지실 거예요!

      1. 반복문이란?
        반복문은 특정 작업을 여러 번 반복해서 실행하고 싶을 때 사용하는 프로그래밍 구조입니다. 예를 들어, 엑셀 시트의 100개 셀에 같은 작업을 적용하고 싶다면 반복문을 사용하면 됩니다. 이렇게 하면 코드를 100번 작성하는 대신 몇 줄로 간단히 처리할 수 있죠.

      2.  Excel VBA의 주요 반복문
        Excel VBA에서는 주로 세 가지 유형의 반복문을 사용합니다:
        • For...Next
        • Do...Loop
        • For Each...Next
        각각의 특징과 사용법을 자세히 알아볼까요?

      3. For...Next 반복문
        For...Next 반복문은 특정 횟수만큼 코드를 반복할 때 사용합니다. 시작 값과 끝 값을 지정하고, 그 사이의 모든 값에 대해 코드를 실행하는 방식이죠.
        For 변수 = 시작값 To 끝값 [Step 증가값]
            '반복할 코드
        Next 변수
        간단한 예제를 볼까요?
        A열의 1부터 10까지의 셀에 숫자를 채우는 코드입니다.
        Sub FillNumbers()
            Dim i As Integer
            
            For i = 1 To 10
                Cells(i, 1).Value = i
            Next i
        End Sub

        이 코드를 실행하면 A1부터 A10까지 1부터 10까지의 숫자가 채워집니다.
        Step을 사용하면 증가 값을 변경할 수 있어요.
        예를 들어, 짝수만 채우고 싶다면 아래와 같이 작성하면 됩니다.
        Sub FillEvenNumbers()
            Dim i As Integer
            
            For i = 2 To 20 Step 2
                Cells(i / 2, 1).Value = i
            Next i
        End Sub
        이 코드는 A1부터 A10까지 2, 4, 6, ..., 20을 채웁니다.

      4. Do...Loop 반복문
        Do...Loop 반복문은 특정 조건이 만족될 때까지 코드를 반복합니다. 조건을 먼저 검사하고 싶으면 'Do While' 또는 'Do Until'을, 코드를 실행한 후 조건을 검사하고 싶으면 'Do...Loop While' 또는 'Do...Loop Until'을 사용합니다.

        기본 구조는 이렇습니다.
        Do While 조건
            '반복할 코드
        Loop
        
        ' 또는
        
        Do
            '반복할 코드
        Loop While 조건
        예를 들어, 사용자가 "그만"이라고 입력할 때까지 계속 입력을 받는 코드를 만들어볼까요?
        Sub GetUserInput()
            Dim userInput As String
            Dim row As Integer
            
            row = 1
            
            Do
                userInput = InputBox("값을 입력하세요. ('그만'을 입력하면 종료)")
                If userInput <> "그만" Then
                    Cells(row, 1).Value = userInput
                    row = row + 1
                End If
            Loop Until userInput = "그만"
        End Sub
        이 코드는 사용자가 "그만"을 입력할 때까지 계속해서 입력을 받아 A열에 순서대로 기록합니다.
      5. For Each...Next 반복문
        For Each...Next 반복문은 컬렉션이나 배열의 각 요소에 대해 작업을 수행할 때 유용합니다. 특히 Excel에서 선택한 범위의 모든 셀을 처리할 때 자주 사용됩니다.

        기본 구조는 이렇습니다.
        For Each 요소 In 컬렉션
            '반복할 코드
        Next 요소

        선택한 범위의 모든 셀 값을 2배로 만드는 예제를 볼까요?
        Sub DoubleValues()
            Dim cell As Range
            
            For Each cell In Selection
                If IsNumeric(cell.Value) Then
                    cell.Value = cell.Value * 2
                End If
            Next cell
        End Sub
        이 코드를 실행하기 전에 원하는 범위를 선택하세요.
        그러면 선택한 범위 내의 모든 숫자 값이 2배가 됩니다.

      6. 중첩 반복문
        때로는 반복문 안에 또 다른 반복문을 넣어야 할 때가 있습니다. 이를 중첩 반복문이라고 하는데요, 예를 들어 2차원 배열이나 표를 다룰 때 유용합니다.

        A1:E5 범위에 곱셈표를 만드는 예제로 중첩 반복문을 살펴볼까요?
        Sub MultiplicationTable()
            Dim row As Integer
            Dim col As Integer
            
            For row = 1 To 5
                For col = 1 To 5
                    Cells(row, col).Value = row * col
                Next col
            Next row
        End Sub
        이 코드를 실행하면 A1:E5 범위에 1부터 5까지의 곱셈표가 만들어집니다.

      7. 반복문 제어하기
        때로는 반복문을 중간에 멈추거나 다음 반복으로 넘어가고 싶을 때가 있습니다.
        이럴 때 사용하는 키워드가 있어요.
        • Exit For / Exit Do: 반복문을 즉시 종료하고 빠져나갑니다.
        • Continue For / Continue Do: 현재 반복을 중단하고 다음 반복으로 넘어갑니다.
        예를 들어, 1부터 100까지의 숫자 중 3의 배수만 출력하되, 50을 넘으면 멈추는 코드를 만들어볼까요?
        Sub PrintMultiplesOfThree()
            Dim i As Integer
            Dim row As Integer
            
            row = 1
            
            For i = 1 To 100
                If i Mod 3 = 0 Then
                    Cells(row, 1).Value = i
                    row = row + 1
                    
                    If i > 50 Then
                        Exit For
                    End If
                End If
            Next i
        End Sub
        이 코드는 A열에 3, 6, 9, ..., 48까지만 출력하고 멈춥니다.

      8. 성능 고려사항
        반복문을 사용할 때는 성능에 주의를 기울여야 합니다. 특히 큰 데이터셋을 다룰 때 그렇죠. 여기 몇 가지 팁을 소개해드릴게요:
        • 가능하면 For Each 문을 사용하세요. Range 객체와 함께 사용할 때 일반적으로 가장 빠릅니다.
        • 셀을 자주 읽거나 쓸 때는 배열을 사용하세요. 워크시트와의 상호작용을 줄이면 성능이 크게 향상됩니다.
        • Application.ScreenUpdating = False를 사용해 화면 업데이트를 끄면 속도가 빨라집니다. 작업이 끝나면 다시 True로 설정하는 걸 잊지 마세요.
        큰 범위의 합계를 구하는 예제로 이 팁들을 적용해볼까요?
        Sub SumLargeRange()
            Dim data As Variant
            Dim total As Double
            Dim i As Long, j As Long
            
            Application.ScreenUpdating = False
            
            ' A1:Z1000 범위의 데이터를 배열로 읽어옵니다
            data = Range("A1:Z1000").Value
            
            ' 배열의 모든 요소를 더합니다
            For i = 1 To UBound(data, 1)
                For j = 1 To UBound(data, 2)
                    If IsNumeric(data(i, j)) Then
                        total = total + data(i, j)
                    End If
                Next j
            Next i
            
            ' 결과를 AA1 셀에 출력합니다
            Range("AA1").Value = total
            
            Application.ScreenUpdating = True
        End Sub
        이 방식은 각 셀에 직접 접근하는 것보다 훨씬 빠르게 동작합니다.



        끝!

        지금까지 Excel VBA에서 반복문을 사용하는 방법에 대해 알아보았습니다.
        For...Next, Do...Loop, For Each...Next 등 다양한 반복문의 사용법과 예제를 살펴보았고,
        중첩 반복문과 반복문 제어 방법, 그리고 성능 향상을 위한 팁까지 다뤘습니다.

        반복문은 VBA 프로그래밍의 핵심 요소 중 하나입니다.
        처음에는 어려워 보일 수 있지만, 연습을 통해 익숙해지면 엑셀 작업의 효율성을 크게 높일 수 있답니다.
        이 글에서 소개한 예제들을 직접 따라해보고, 여러분의 실제 업무에 적용해보세요.
      1. VBA를 배우는 과정이 때로는 도전적일 수 있지만,
        한 걸음 한 걸음 나아가다 보면 어느새 복잡한 작업도 쉽게 자동화할 수 있는 실력을 갖추게 될 거예요.
        궁금한 점이 있다면 언제든 질문해주세요. 함께 배우고 성장해 나가요!

        엑셀 VBA로 더 효율적인 업무 환경을 만들어가는 여러분을 응원합니다.
        다음에 또 다른 유용한 VBA 팁으로 찾아뵐게요. 그때까지 즐겁고 생산적인 엑셀 라이프 되세요!
Posted by 샌츠
,

일을 하다가 뭐라도 조금 편하게 만들어보기 위해서 만든 코드.

수많은 데이터들을 비교하여 체크해야 하는 일로 인해 현재 내가 선택한 위치의 값과 상,하의 데이터와 일일이 비교해보다보니 커서의 위치가 종종 혼동이되어 커서의 위치의 행의 배경을 변경하는 코드를 만들어 보았다.

  • WorkSheet_SelectionChange 는 '셀 선택 영역이 변경될 때' 트리거되는 이벤트로 마우스로 클릭하는 것만으로도 이벤트를 발생한다.

코드의 구성은 나름 간단하다.

1. 현재 행과 이전행을 비교하고 다를시 이전행의 배경색을 기본색상으로 변경한다.

2. 현재 행의 배경색을 노랑색으로 변경한다.

3. 이전행의 값을 현재 행의 값으로 업데이트 한다.

아래의 코드는 A부터 Z까지의 배경색상을 변경하는 코드로 A~D만 변경하고 싶다면 col값을 4로 변경하면 된다.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static previousRow As Long
    Dim currentRow As Long
    Dim col As Long
    
    currentRow = Target.Row
    ' Change the range of columns as needed
    ' A = 1, Z=26
    col = 26
    
    ' Check if the current row is different from the previous row
    If currentRow <> previousRow Then
        ' Set the background color of the previous row back to white for columns A:Z
        If previousRow > 0 Then
            For i = 1 To col
                Me.Cells(previousRow, i).Interior.ColorIndex = xlNone ' Set to default white
            Next i
        End If
        ' Set the background color to yellow for columns A:Z in the current row
        For j = 1 To col
            Me.Cells(currentRow, j).Interior.Color = RGB(255, 255, 0) ' Set to yellow
        Next j
        
        ' Update the previous row to the current row
        previousRow = currentRow
    End If
End Sub

 

Posted by 샌츠
,