HOWTO · VBA

Microsoft Excel VBA에서 셀이 비어 있는지 확인하는 방법

이 문서에서는 Microsoft Excel VBA에서 셀이 비어 있는지 확인하는 방법을 설명합니다.

이 페이지의 내용

정말로 비어 있는 워크시트 셀에 대해서는 IsEmpty(Range("A1").Value)가 일반적인 VBA 확인 방법입니다. 아무 문자도 표시하지 않는 수식에도 수식 자체는 존재하므로, 그 결과가 빈 것으로 간주되어야 한다면 문자열 비교나 Len을 사용하세요. 매크로가 감지해야 하는 대상에 맞는 확인 방법을 선택하세요.

셀이 비어 있는지 확인하는 방법

Excel 셀에는 상수, 수식 또는 값이 없을 수 있습니다. VBA의 Empty는 Variant 상태이고, Null은 별개의 값입니다. 어느 것도 ""로 평가되는 수식과 서로 바꿔 쓸 수 없습니다. 예제에서는 지운 뒤의 A2를 사용합니다. 통합 문서에서 수식을 사용하는 경우, 메서드를 선택하기 전에 ""를 반환하는 수식을 빈 것으로 간주할지 결정하세요.

방법 1: IsEmpty 함수

IsEmpty는 인수가 초기화되지 않은 Variant일 때 True를 반환합니다. 상수, 수식 또는 오류 값이 있는 셀은, 수식이 아무것도 표시하지 않더라도 초기화되지 않은 Variant가 아닙니다. 다음 구문 예시는 A2를 확인합니다. 표준 VBA 모듈에 배치하고 A2를 지운 뒤 CheckA2를 실행하세요. VBA는 구성된 예제 런타임으로 실행할 수 없으므로, 이 프로시저는 실행되지 않으며 런타임 출력이 있다고 주장하지 않습니다. 이 줄들을 표준 VBA 모듈에 복사하세요:

Sub CheckA2()
    If IsEmpty(Range("A2").Value) Then
        MsgBox "A2 is blank"
    Else
        MsgBox "A2 contains a value or formula"
    End If
End Sub

명시된 지워진 셀 설정에서는 If 분기가 A2 is blank를 표시하도록 설계되어 있습니다. ""를 반환하는 A2의 수식은 셀에 여전히 수식이 포함되어 있으므로 Else 분기를 탑니다. Range 객체를 전달할 수도 있지만, .Value를 사용하면 확인 중인 값이 명시됩니다.

아래 그림은 값이 채워진 셀의 별도 예시를 보여줍니다. A1에는 “Not empty"라는 텍스트가 들어 있고 그 아래 행들은 비어 있습니다. 이 설정에서는 A1에 텍스트가 포함되어 있으므로 IsEmpty(Range("A1").Value)는 False를 반환합니다.

A1에 “Not empty"가 포함되고 아래 행은 비어 있는 워크시트

IsBlank는 Excel 워크시트 함수의 이름이며, 직접 호출할 수 있는 VBA 함수가 아닙니다. 워크시트 함수의 동작이 필요하면 지원되는 경우 Application.WorksheetFunction을 사용하거나, 작업에 맞는 의미의 VBA 확인을 사용하세요.

방법 2: vbNullString과 비교

vbNullString은 길이가 0인 문자열을 나타내는 VBA 상수이며, Null 값을 보유하지 않습니다. If Range("A2").Value = vbNullString Then은 셀 값을 그 문자열과 비교합니다. 이는 지워진 셀과 ""라는 수식 결과를 빈 것으로 인식하므로, IsEmpty와는 다른 질문에 답합니다. 비교 전에 오류를 처리하는 수식 인식 확인에는 CheckA2 대신 이 프로시저를 사용하세요. VBA는 구성된 예제 런타임으로 실행할 수 없으므로, 이 프로시저는 실행되지 않으며 런타임 출력이 있다고 주장하지 않습니다. 이 줄들을 같은 표준 VBA 모듈에 복사하세요:

Sub CheckA2ForBlankResult()
    If IsError(Range("A2").Value) Then
        MsgBox "A2 contains an error"
    ElseIf Range("A2").Value = vbNullString Then
        MsgBox "A2 is blank or its formula returns an empty string"
    Else
        MsgBox "A2 contains a nonempty value"
    End If
End Sub

방법 3: 빈 문자열과 비교

리터럴 ""와의 비교도 비슷한 문자열 비교 동작을 합니다: If Range("A2").Value = "" Then. 지워진 셀과 ""라는 수식 결과 모두 같은 분기를 따라야 할 때 유용합니다. 셀에 수식이 없다는 것이나 셀이 정말로 비어 있다는 것을 증명하지는 않습니다. 구분이 중요하면 HasFormula를 별도로 확인하고, 오류가 발생할 수 있으면 비교 전에 별도 분기에서 IsError를 테스트하세요.

방법 4: Len 함수

Len은 문자열 표현의 문자 수를 반환합니다. 조건 If Len(Range("A2").Value) = 0 Then은 결과가 0자인지 알고 싶을 때 유용합니다. ""라는 수식 결과와도 일치할 수 있으며, 그것을 지워진 셀과 구별하지는 못합니다. 숫자 값은 문자열 길이가 0이 아니며, 오류 값에 대한 Len은 안전한 일반 확인이 아닙니다. 오류가 발생할 수 있으면 먼저 IsError를 사용하세요.

방법 5: Count 및 Counta 함수

Count는 범위 내 숫자 셀을 세고, CountA는 텍스트와 수식을 포함해 데이터가 있는 셀을 셉니다. 셀 하나에 대해 Application.WorksheetFunction.Count(Range("A2")) = 0은 숫자 값이 없다는 뜻이며, 반드시 비어 있다는 뜻은 아닙니다. CountA(Range("A2")) = 0은 지워진 셀을 감지하지만, ""를 반환하는 수식은 셀에 수식이 포함되어 있으므로 여전히 셉니다. 여러 셀 범위에 대해서는 이 함수들이 개수를 반환하므로, 모든 셀이 선택한 기준을 충족하는지 판단하는 것이 목표일 때만 범위 크기와 비교하세요.

방법 6: IsNull 함수

IsNull은 Variant에 VBA Null 값이 포함되어 있는지 테스트합니다. 이는 누락되거나 알 수 없는 데이터를 나타내는 데 자주 사용됩니다. 일반적인 빈 워크시트 셀은 Null이 아니므로, IsNull(Range("A2").Value)는 일반적인 빈 셀 확인이 아니며 지워진 셀 예시에서는 False를 반환합니다. VBA 데이터 소스가 실제로 Null을 제공할 수 있고 그것이 식별하려는 상태일 때만 사용하세요.

결론

값이 없는 셀에는 해당 .Value에 IsEmpty를 사용하세요. ""를 반환하는 수식도 빈 분기를 따라야 한다면 vbNullString 또는 ""와 비교하거나, Len이 0인지 확인하세요. Count는 숫자 데이터가 있는지를 묻고, CountA는 셀에 데이터나 수식이 포함되어 있는지를 묻습니다. IsNull은 별개의 VBA 값인 Null을 위한 것입니다. 워크시트 오류가 발생할 수 있으면 비교와 Len을 보호하고, 수식 존재 여부가 중요하면 HasFormula를 사용하세요.