본문 바로가기
#4 VBA/#4.1 환경설정 및 기본개념

VBA 코드 줄 넘김 규칙 완벽 가이드

by 이세계의엑셀 2024. 12. 29.
반응형

VBA 코드 줄 넘김 규칙을 제대로 적용하면 가독성과 유지보수가 크게 향상된다. 언더스코어(_), 콤마 뒤 줄바꿈, 조건문 분할 등 구체적 예시를 통해 VBA 코드 줄 넘김 규칙을 단계별로 살펴보자.

VBA 코드 줄 넘김 규칙은 복잡한 매크로를 작성할 때 가독성·유지보수성을 높이는 핵심 요소다. 특히 줄이 길어지는 조건문이나 함수 호출부를 적절히 분할해두면 팀원 간 협업 시에도 오류를 최소화할 수 있다. 여기서는 VBA 코드 줄 넘김 규칙에 대한 기본 개념, 다양한 예시, 주의사항, 코드 작성 팁 등을 종합적으로 정리한다.

반응형

VBA 코드 줄 넘김의 기본 원리

언더스코어(_) 사용

  • VBA에서 줄이 길어질 경우, 문장 끝에 공백 + 언더스코어(_)를 배치하면 물리적으로 다음 줄에서 코드를 이어갈 수 있다.
  • 예를 들어 If 문의 조건이 매우 길다면, 다음과 같이 줄 넘김을 적용할 수 있다.
If (myValue > 10 And myValue < 100) And _
   (anotherCondition = True) Then

    MsgBox "조건을 만족했습니다."
End If
  • 줄 끝 부분에 반드시 공백이 있어야 언더스코어(_)를 사용할 수 있으므로 ...And_처럼 공백 없이 쓰면 오류가 발생한다.
  • 언더스코어(_) 바로 뒤에 주석을 추가하면 잘려 보이므로, 줄 마지막 주석을 달 때는 Rem이나 ' 기호를 쓰기 전 줄 넘김 처리를 주의해야 한다.

여러 개의 인수 분할

  • 함수나 서브 프로시저를 호출할 때 인수가 많으면 한 줄에 길게 늘어져 가독성이 떨어진다. 줄 넘김을 통해 인수들을 정렬해두면 훨씬 깔끔하다.
Call SomeFunction( _
    "Parameter1", _
    123, _
    True, _
    Now, _
    Sheets("Data").Range("A1") _
)
  • 일부 개발자는 인수 리스트 전후에 괄호를 적절히 배치해 들여쓰기를 명확히 하고, 쉼표나 연산자가 눈에 들어오게 정렬하기도 한다.

문장 연결 구분자

  • VBA는 기본적으로 문장 간 구분자로 콜론(:)을 쓸 수 있지만, 줄 넘김과는 별개다. 예를 들어 x=1 : y=2 같이 한 줄에 여러 문장을 배치할 수도 있다.
  • 긴 문장을 여러 줄로 나누는 것과 문장을 한 줄에 몰아쓰는 것은 상반된 개념이므로, 적절한 코드 스타일을 유지하려면 콜론 사용을 최소화하고, 필요한 경우에만 선택적으로 사용한다.

 

다양한 줄 넘김 시나리오

조건문 줄 넘김

  • If ... Then ... ElseIf 구조가 길어질 때는 각 조건을 줄바꿈해 가독성을 높인다.
If (score >= 90 And score <= 100) Then
    MsgBox "A등급"
ElseIf (score >= 80 And score < 90) Then
    MsgBox "B등급"
ElseIf (score >= 70 And score < 80) Then
    MsgBox "C등급"
Else
    MsgBox "재시험 필요"
End If
  • 위 예시는 조건문 줄 넘김 규칙을 단순히 If-ElseIf로 구분했지만, 조건 자체가 길어질 경우 And, Or를 중심으로 언더스코어(_)를 삽입해줄 수 있다.

With ~ End With 구문의 줄 넘김

  • With 구문 안에서 메서드나 속성을 여럿 호출하면 한 줄이 길어질 수 있다. 아래 예시처럼 메서드마다 줄바꿈하면 직관적이다.
With Sheets("Result")
    .Range("A1").Value = "결과 요약"
    .Range("B2").Formula = "=SUM(Data!B2:B100)"
    .Range("C2").Font.Bold = True
    .Range("C2").HorizontalAlignment = xlCenter
End With
  • 하나의 메서드/속성이 지나치게 길다면 역시 ... _ 형태로 줄 넘김하여 가독성을 더 높일 수 있다.

연산자 기준 정렬

  • 조건문이나 수식이 여러 줄로 나뉠 때, =, +, -, And, Or 등 연산자를 기준으로 줄의 끝에 배치하거나 시작에 배치해 정렬하는 방식이 있다.
  • 예를 들어, 긴 SQL 쿼리를 VBA에서 작성하는 경우 다음과 같이 줄 넘김 규칙을 적용할 수 있다:
Dim sql As String

sql = "SELECT CustomerName, OrderDate, TotalAmount " & _
      "FROM Orders " & _
      "WHERE OrderDate >= #2024-01-01# " & _
      "AND  TotalAmount > 1000 " & _
      "ORDER BY OrderDate DESC"
  • 이렇게 작성하면 쿼리 각 절을 한눈에 파악하기 쉽다.

 

연속된 문자 결합

  • 문자열이 길어져 한 줄에 담기 어렵다면, & _ 형태로 줄을 이어붙인다.
Dim longString As String
longString = "이것은 매우 긴 문자열로 " & _
             "다음 줄부터 계속 연결되며, " & _
             "정확한 줄 넘김 규칙을 지키면 " & _
             "코드 가독성이 훨씬 좋아집니다."
MsgBox longString
  • 모든 연속된 줄에 & _이 들어가야 하며, 줄 마지막에 공백 후 _ 을 넣는 걸 잊지 않아야 한다.

권장 들여쓰기 스타일

블록 구조 들여쓰기

  • If ~ End If, For ~ Next, Sub ~ End Sub 같은 블록은 한 수준 들여쓰기 후 내부 코드 작성이 일반적이다.
  • 예:
Sub CheckScores()
    Dim i As Long
    For i = 1 To 10
        If Cells(i, 1).Value >= 50 Then
            Cells(i, 2).Value = "합격"
        Else
            Cells(i, 2).Value = "불합격"
        End If
    Next i
End Sub
  • If, For, Select Case, Do While 등 블록의 시작과 끝을 찾기 쉽게 하려면, 2~4칸 들여쓰기를 고정하면 좋다.

중첩 구조 시 들여쓰기 심화

  • If 안에 또 다른 If나 For가 들어가면 들여쓰기를 한 번 더 한다. 너무 깊은 중첩은 구조를 다시 짜볼 필요가 있지만, 어느 정도는 불가피하다.
If customerName = "홍길동" Then
    If orderAmount > 50000 Then
        Debug.Print "특별 할인을 적용합니다."
    Else
        Debug.Print "일반 할인이 적용됩니다."
    End If
Else
    Debug.Print "할인 대상 아님"
End If

실제 코딩 시 주의 사항

줄 넘김 뒤 주석 사용

  • 언더스코어(_) 뒤에 곧바로 주석(')을 달면 문법 오류가 날 수 있다. 예:
' 잘못된 예시
If x > 10 And _
    y < 5 ' 내림 조건
    Then ' => 오류 발생
  • 줄 끝에 주석을 달아야 할 경우, 코드와 주석 사이에 언더스코어(_)를 넣지 않도록 유의하거나, 주석을 별도 줄로 분리한다.

괄호와 쉼표의 위치

  • 인수나 조건을 줄바꿈할 때 괄호·쉼표·연산자가 어디 위치하는지가 중요한 가독성 포인트다.
  • 모던 언어들은 흔히 연산자를 다음 줄의 맨 앞에 배치하지만, VBA에선 주로 (문장 ... _ 형태로 이어서, 연산자는 뒤쪽 줄 끝에 오는 경향이 많다.

Label과 GoTo

  • VBA에는 Label(예: ErrHandler:)이나 GoTo 문이 있지만, 가급적 사용을 지양하고 구조화된 If나 For를 쓰는 편이 좋다.
  • 어쩔 수 없이 예외 처리를 위해 GoTo ErrorHandler를 쓸 때도, 줄 넘김 규칙을 준수해 Label이 코드 사이에 파묻히지 않도록 주의한다.

 

자동 정렬 도구 활용

  • 기본 VBA 에디터는 자동 정렬 기능이 제한적이므로, MZ-Tools 같은 서드파티 확장 플러그인을 사용하면 Reformat Code 기능 등을 통해 일부 줄 넘김 규칙을 자동화할 수 있다.
  • 이때 원하는 포맷(들여쓰기 크기, 언더스코어(_) 위치 등)을 커스터마이징해두면 반복 작업이 줄어든다.

코드 예시: 복합 조건문과 줄 넘김

아래는 VBA 코드 줄 넘김 규칙을 구체적으로 적용한 예시다. 조건문이 길고, 함수 호출 시 인수가 많아 줄이 확장되는 상황을 상정했다.

Option Explicit

Sub GenerateReport()

    Dim total As Long
    Dim dataRange As Range
    Dim isValid As Boolean

    ' 긴 범위 설정
    Set dataRange = Sheets("Data").Range("A2:B500")

    ' 복합 조건 판단
    If (CheckDate(Sheets("Config").Range("C1").Value) = True) And _
       (Sheets("Config").Range("D1").Value = "Y") And _
       (Sheets("Option").Cells(2, 3).Value < 500) Then

       isValid = True
    Else
       isValid = False
    End If

    If isValid = True Then
        total = CalculateTotal( _
                    dataRange, _
                    Sheets("Option").Range("A1").Value, _
                    Sheets("Option").Range("B1").Value _
                 )

        MsgBox "총합: " & total, vbInformation
    Else
        MsgBox "조건 불충족: 보고서 생성 불가", vbExclamation
    End If

End Sub

Function CalculateTotal( _
             ByVal rng As Range, _
             ByVal factor As Long, _
             ByVal offset As Long _
          ) As Long

    Dim cell As Range
    Dim sumValue As Long

    sumValue = 0

    For Each cell In rng
        If IsNumeric(cell.Value) Then
            sumValue = sumValue + (cell.Value * factor + offset)
        End If
    Next cell

    CalculateTotal = sumValue
End Function

Private Function CheckDate(val As Variant) As Boolean
    If IsDate(val) Then
        If CDate(val) > Date Then
            CheckDate = False
        Else
            CheckDate = True
        End If
    Else
        CheckDate = False
    End If
End Function

위 코드에서 주의할 점:

  • If ( ... ) And _ ( ... ) 구문을 사용해 조건을 가로로 너무 길게 늘리지 않았다.
  • CalculateTotal 함수 호출부에서 인수를 나열할 때 각 줄 끝에 쉼표와 언더스코어(_)를 배치해 가독성을 높였다.
  • 함수 정의부에도 파라미터 리스트가 많으면 ByVal rng As Range, _ 같은 식으로 줄을 나누어 인수별로 구분한다.

실무 적용 시 문제 해결

  1. 디버깅 편의
    복잡한 오류가 날 때, 조건문이나 인수 목록이 한 줄로 길게 늘어져 있으면 디버깅이 매우 어렵다. 줄 넘김 규칙을 잘 지키면 한눈에 조건과 인수의 구성을 파악할 수 있어 오류를 빨리 찾는다.
  2. 협업 효율
    팀원이 긴 코드를 건드려야 할 때, 어디서부터 어디까지가 하나의 문장인지 알기 어려우면 생산성이 떨어진다. 줄 넘김을 통해 문장 구분이 명확해지므로 협업성이 향상된다.
  3. 리팩토링 유도
    줄 넘김 규칙을 적용하다 보면, “이 로직이 너무 복잡해서 줄이 지나치게 길어진다”라는 문제를 알게 되는 경우가 많다. 이때 자연스럽게 함수를 분리하거나 중복 코드를 모듈화하는 식으로 리팩토링이 진행된다.
  4. 코드 리뷰 간편화
    코드 리뷰 시, 한 줄에 인수 20개가 몰린 함수를 보게 되면 리뷰어가 집중하기 어렵다. 줄 넘김을 통해 시각적 부담을 줄이고, 주석이나 공백 라인을 적절히 배치하면 리뷰 속도가 개선된다.

VBA 코드 줄 넘김 규칙을 장기적으로 습관화하기

  • 모듈을 추가할 때마다 Option Explicit를 자동 적용하는 것처럼, 줄 넘김 규칙도 처음부터 습관으로 들이는 편이 좋다.
  • 팀 내부에서 “조건문이 80자 이상 길면 언더스코어(_)로 분할한다” 등 가이드라인을 설정하면 코드 품질이 한결 높아진다.
  • 긴 문자열, 긴 조건문, 긴 함수 호출부 등의 케이스별로 예시를 만들어 신입 개발자나 협업 인원에게 배포하면, 통일된 스타일을 유지할 수 있다.

마지막 문단에서 VBA 코드 줄 넘김 규칙 재언급

VBA 코드 줄 넘김 규칙을 충실히 이행하면, 길고 복잡한 매크로도 한눈에 이해하기 쉬워지고, 디버깅 시간이 대폭 단축된다. 언더스코어(_)를 올바르게 배치하고, 조건문이나 인수 리스트를 보기 좋게 정렬해두면 유지보수나 협업 과정에서 얻는 이점이 크다. 특히 VBA 코드 줄 넘김 규칙은 단순 미관이 아니라, 프로젝트 전체의 코드 신뢰도를 높이고 오류 발생을 줄이는 데 직접 기여하므로, 꾸준히 익혀서 업무 효율을 한층 높이길 권장한다.

반응형