본문 바로가기
■ 칼퇴를 위한 VBA : 사례/- VBA for 엑셀

VBA로 엑셀 데이터 검증 자동화하기

by 포탈메이커 2023. 7. 25.

VBA로 엑셀 데이터 검증 자동화하기

엑셀은 광범위하게 사용되는 스프레드시트 프로그램으로, 데이터의 입력, 편집, 분석 등 다양한 작업을 수행하는데 주로 활용됩니다. 특히, 데이터의 검증은 중요한 과정 중 하나로, 올바른 데이터의 입력과 오류 처리를 보장하는 것은 매우 중요합니다.

이번 포스팅에서는 VBA를 활용하여 엑셀 데이터의 검증을 자동화하는 방법에 대해 알아보겠습니다. 


 

칼퇴키트, 업무용 도구모음

칼퇴를 위해 꼭 필요한 도구 모음을 제공합니다. 당장의 업무에 필요한 순간 사용하는 가벼운 메모장, 계산기, 변환기 등

portalmaker.backtohome.kr

 

1. 검증 규칙 설정

먼저, 데이터의 검증을 위해 어떤 규칙을 설정할지 결정해야 합니다. 예를 들어, 이메일 주소의 형식이 올바른지, 전화번호가 숫자로만 구성되어 있는지 등을 확인할 수 있습니다. 이번 예제에서는 아래와 같은 규칙을 설정하고자 합니다.

  1. 성적은 0부터 100 사이의 숫자로 입력되어야 한다.
  2. 이름은 알파벳 대소문자와 공백으로만 구성되어야 한다.
  3. 이메일 주소의 형식이 올바른지 확인한다.
  4. 전화번호는 숫자와 하이픈(-)으로만 구성되어야 한다.

2. VBA 코드 작성

엑셀의 개발 탭에서 VBA 에디터를 열어 아래와 같은 코드를 작성합니다.

Sub 데이터검증자동화()
    Dim rng As Range
    Dim cell As Range

    Set rng = Range("A2:F10") ' 데이터 범위 지정

    For Each cell In rng
        ' 성적 범위를 벗어난 값인지 확인
        If cell.Column = 3 Then
            If cell.Value < 0 Or cell.Value > 100 Then
                MsgBox "성적은 0부터 100 사이의 숫자로 입력되어야 합니다."
                cell.Select
                Exit Sub
            End If
        End If
        
        ' 이름에 알파벳과 공백 이외의 문자가 포함되어 있는지 확인
        If cell.Column = 1 Then
            If Not IsAlphaOnly(cell.Value) Then
                MsgBox "이름은 알파벳 대소문자와 공백으로만 구성되어야 합니다."
                cell.Select
                Exit Sub
            End If
        End If
        
        ' 이메일 주소 형식이 올바른지 확인
        If cell.Column = 4 Then
            If Not IsEmailValid(cell.Value) Then
                MsgBox "이메일 주소의 형식이 올바르지 않습니다."
                cell.Select
                Exit Sub
            End If
        End If
        
        ' 전화번호에 숫자와 하이픈 외의 문자가 포함되어 있는지 확인
        If cell.Column = 5 Then
            If Not IsPhoneNumberValid(cell.Value) Then
                MsgBox "전화번호는 숫자와 하이픈으로만 구성되어야 합니다."
                cell.Select
                Exit Sub
            End If
        End If
    Next cell

    MsgBox "검증이 완료되었습니다."
End Sub

Function IsAlphaOnly(str As String) As Boolean
    Dim i As Integer
    For i = 1 To Len(str)
        If Not (str Like "[A-Za-z ]") Then
            IsAlphaOnly = False
            Exit Function
        End If
    Next i
    IsAlphaOnly = True
End Function

Function IsEmailValid(str As String) As Boolean
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    With regex
        .Pattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$"
        IsEmailValid = .Test(str)
    End With
End Function

Function IsPhoneNumberValid(str As String) As Boolean
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    With regex
        .Pattern = "^[0-9\-]+$"
        IsPhoneNumberValid = .Test(str)
    End With
End Function

3. 코드 설명

위의 VBA 코드는 데이터의 검증 규칙을 설정하고, 이를 적용하여 데이터의 일관성을 검증하는 역할을 합니다.

아래는 코드의 동작 설명입니다.

  • 데이터_검증_자동화 서브루틴은 데이터 범위를 지정하고, 각 셀마다 규칙을 적용합니다.
  • 데이터 범위(rng)는 A2부터 F10까지로 설정되어 있으며, 필요에 따라 변경할 수 있습니다.
  • 각 셀을 순회하면서, 해당 열에 따라 규칙을 적용합니다.
  • 각 규칙(성적 범위, 이름 형식, 이메일 형식, 전화번호 형식)에 해당하지 않는 값이 입력되면 메시지 박스로 에러를 알립니다.
  • 이름 형식을 검증하기 위한 IsAlphaOnly 함수는 알파벳과 공백 이외의 문자가 포함되어 있는지 확인합니다.
  • 이메일 주소 형식을 검증하기 위한 IsEmailValid 함수는 해당 형식의 정규식을 사용하여 유효성을 검사합니다.
  • 전화번호 형식을 검증하기 위한 IsPhoneNumberValid 함수는 숫자와 하이픈(-)으로만 구성되어 있는지 확인합니다.

검증 결과 일관성이 없는 데이터가 발견되면 해당 셀을 선택하고 검증을 중단합니다. 모든 데이터가 검증 규칙에 부합하는 경우, 검증이 완료되었다는 메시지를 표시합니다.


4. 마치며

이번 포스팅에서는 VBA를 활용하여 엑셀 데이터의 검증을 자동화하는 방법에 대해 알아보았습니다. VBA를 사용하면 복잡한 데이터 규칙을 자동으로 적용할 수 있으며, 데이터 입력 오류를 사전에 방지할 수 있습니다. VBA를 활용하여 데이터의 일관성을 유지하고 정확한 분석을 수행할 수 있도록 노력해봅시다.



포스팅이 도움이 되셨다면 구독, 공감, 댓글 부탁드려요!

행복한 하루 되세요!