에너지 관점 스터디:에관스

컴활 1급 · 컴활 1급 실전 판단

컴활 1급 Nz·IsNull·IIf 차이: Access Null 처리 예제

두음 암기는 '널문·엔대·아이갈'입니다. IsNull은 Null인지 묻고, Nz는 Null을 다른 값으로 대체하고, IIf는 조건에 따라 반환할 결과를 갈라 줍니다. 셋 다 빈칸과 관련 있어 보여도 반환하는 값과 맡는 역할이 다릅니다.

컴활 1급 Access에서 IsNull([배송비])는 참·거짓 검사이고, Nz([배송비], 0)는 Null일 때 0을 반환합니다. IIf(IsNull([배송비]), "미입력", "입력됨")은 검사 결과에 따라 안내 문구를 고릅니다. 함수가 원본 필드 값을 직접 저장하거나 수정하는 것은 아닙니다.

아래 표기와 문제는 에관스가 만든 학습 예제이며 실제 기출문항이 아닙니다. 계산식에 Null이 생겼다고 무조건 0을 넣기보다, 문제에서 미입력 값을 어떻게 취급하라고 했는지 먼저 읽으세요. 함수 선택부터 대체 위치와 오류 점검까지 순서대로 확인합니다.

컴활 1급 Access IsNull 검사 Nz 대체 IIf 결과 선택과 Null 연산을 널문 엔대 아이갈로 구분한 인포그래픽
널문·엔대·아이갈로 검사·대체·분기를 구분합니다. Nz는 모든 오류를 막는 함수가 아니며 Null일 때의 반환값을 지정합니다.
작성에관스 컴활 1급 학습팀 발행2026년 9월 28일 수정2026년 9월 28일 주제컴활 1급 실전 판단

핵심 포인트

이 글에서 먼저 챙길 것

  • IsNull(Null)은 True, IsNull(0)과 IsNull("")는 False입니다.
  • Nz(Null, 0)은 0을 반환하지만 Nz(0, 100)은 기존 값 0을 유지합니다.
  • IIf는 조건에 따라 두 결과 중 하나를 반환하며, Null 전용 함수는 아닙니다.
  • Access 쿼리에서 Nz의 두 번째 인수를 생략하면 Null 자리에 길이 0인 문자열이 반환됩니다.
  • VBA의 IIf는 양쪽 결과식을 평가하므로 0 나누기 방어용 단락 평가로 믿으면 안 됩니다.

본문

컴활 1급 공부 기준을 더 구체적으로 보기

1. Null·빈 문자열·0부터 서로 다르게 보기

Null은 유효한 데이터가 없다는 특별한 상태입니다. 0은 값이 있는 숫자이고, ""는 길이가 0인 문자열입니다. 화면에서 비어 보인다는 이유만으로 모두 Null이라고 단정하지 않습니다.

예를 들어 배송비가 0이면 무료 배송이라는 값을 입력한 것일 수 있습니다. 배송비가 Null이면 아직 요금이 정해지지 않았을 수 있습니다. 이 둘을 합쳐 버리면 계산은 편해져도 의미는 바뀔 수 있습니다.

VBA의 초기화되지 않은 Variant가 갖는 Empty도 Null과 별개입니다. 시험에서 Null, Empty, "", 0을 섞어 제시하면 먼저 데이터 상태를 나누고 함수를 적용하세요.

2. IsNull은 값을 고치는 함수가 아니라 검사 함수

IsNull(식)의 결과는 Boolean입니다. IsNull(Null)은 True이고, IsNull(1250), IsNull(0), IsNull("")는 모두 False입니다. '미입력 여부를 판단하라'는 요구에 맞지만 '미입력을 0으로 표시하라'는 요구를 혼자 해결하지는 못합니다.

폼에서 IsNull([연락처])를 검사한다고 [연락처] 필드가 바뀌는 것은 아닙니다. 검사가 True일 때 안내 메시지를 보여줄지, 입력을 요구할지, 다른 계산을 할지는 별도 로직으로 정합니다.

오답을 고칠 때는 'IsNull이 Null을 없앤다'가 아니라 'IsNull은 식이 Null인지 알려 준다'로 문장을 바꾸세요. 반환값을 True·False로 적어 보면 Nz와 혼동하기 어렵습니다.

3. = Null 비교 대신 IsNull로 판단하기

VBA에서 If 값 = Null Then처럼 비교하면 기대한 참 분기로 들어가지 않습니다. Null과의 비교 결과 자체가 Null이 되기 때문입니다. 값 <> Null 역시 '값이 있다'는 검사가 되지 않습니다.

Null인지 확인하려면 If IsNull(값) Then, Null이 아닌지 확인하려면 If Not IsNull(값) Then처럼 조건을 구성합니다. 쿼리 조건식 표기와 VBA 코드를 섞어 외우지 말고 입력하는 위치부터 구분하세요.

겉보기에는 간단한 등호 문제지만, Null을 일반 숫자나 문자열로 생각하는지 확인하는 함정입니다. 'Null은 같은 값인지 비교할 대상이 아니라 상태를 검사할 대상'이라는 기준을 붙여 두세요.

4. Nz는 Null일 때만 대체값을 반환

Nz(식, 대체값)에서 첫 번째 식이 Null이면 두 번째 인수를 반환합니다. Nz([배송비], 0)는 배송비가 Null일 때 숫자 0을, Nz([연락처], "미등록")은 연락처가 Null일 때 미등록이라는 문자열을 반환합니다.

첫 번째 식이 Null이 아니면 원래 값을 돌려줍니다. Nz(0, 100)은 100이 아니라 0이며, Nz("", "미등록")도 미등록이 아니라 ""입니다. 빈 문자열까지 바꾸라는 조건은 따로 검사해야 합니다.

계산식에 쓸 숫자 대체값은 0처럼 숫자로, 표시용 안내 문구는 따옴표로 감싼 문자열로 구분하세요. Nz가 바꾸는 것은 해당 식의 반환 결과입니다. 원본 레코드를 갱신하려면 별도의 저장·갱신 작업이 필요합니다.

5. Nz의 두 번째 인수는 생략하지 않는 습관

Access 쿼리 식에서 Nz([배송비])처럼 대체값 인수를 생략하면 Null인 필드에 길이 0인 문자열이 반환됩니다. 숫자 계산을 의도했다면 Nz([배송비], 0)처럼 의도를 명시하는 편이 분명합니다.

Access VBA에서는 인수를 생략한 Nz(Null)이 Empty를 반환하며, 이후 숫자·문자열 문맥에 따라 처리됩니다. 따라서 모든 위치에서 'Nz(Null)은 무조건 숫자 0'이라고 외우면 안 됩니다.

정답을 검토할 때 함수 이름만 맞췄다고 끝내지 마세요. 어느 환경의 식인지, Null일 때 무엇을 반환해야 하는지, 그 결과를 숫자로 계산할지 화면에 문자로 보여줄지까지 확인합니다.

6. Nz를 계산식 안에 넣는 위치가 결과를 바꿉니다

상품금액이 12000이고 배송비가 Null이라고 가정합시다. [상품금액]+[배송비]는 Null이 됩니다. Null을 0 배송비로 취급하라는 조건이라면 [상품금액]+Nz([배송비], 0)의 결과는 12000입니다.

반면 Nz([상품금액]+[배송비], 0)는 이미 Null이 된 합계 전체를 0으로 대체합니다. 결과는 12000이 아니라 0입니다. '항목 하나의 미입력 보정'과 '계산 결과 전체의 미입력 보정'은 다른 작업입니다.

두 필드가 모두 Null일 수 있고 각각 0으로 취급하라는 조건이면 Nz([상품금액], 0)+Nz([배송비], 0)처럼 개별 항목에 적용합니다. 문제에서 모르는 값을 그대로 남기라고 했다면 임의로 0을 넣지 않습니다.

7. IIf는 참일 때 결과와 거짓일 때 결과를 선택

IIf(조건, 참일 때 결과, 거짓일 때 결과) 순서로 씁니다. IIf([점수]>=60, "통과", "재확인")은 Null 전용 처리가 아니라 점수 조건으로 표시 문구를 선택하는 예입니다. 여기의 60은 자체 예제 기준이며 시험 합격 기준 안내가 아닙니다.

IIf(IsNull([배송비]), "미입력", "입력됨")에서 IsNull은 검사, IIf는 안내 문구 선택을 맡습니다. 배송비 0은 Null이 아니므로 입력됨이 나옵니다.

Null일 때 0, 아니면 원래 배송비를 반환하기만 하면 Nz([배송비], 0)가 간결합니다. 반대로 원래 값이 아니라 서로 다른 두 표시 문구를 골라야 하면 IIf가 요구사항을 더 직접적으로 드러냅니다.

8. VBA IIf는 실행을 건너뛰는 If 블록이 아닙니다

VBA의 IIf는 truepart와 falsepart를 모두 평가하고 그중 하나를 반환합니다. 그래서 IIf(수량=0, 0, 금액/수량)처럼 쓰면 수량이 0일 때 금액/수량 평가에서 오류가 날 수 있습니다.

오류가 나는 계산을 아예 실행하지 않아야 한다면 VBA에서는 If...Then...Else 블록으로 실행 경로를 나누세요. Null 여부를 먼저 확인하고, 그다음 0인지 확인한 뒤 안전한 경우에만 나눗셈을 수행하는 식으로 구성합니다.

이 주의점은 '조건에 따라 결과를 반환한다'와 '선택하지 않은 식은 실행하지 않는다'가 다른 말이라는 뜻입니다. Access 식 작성 위치와 VBA 실행 환경을 확인하고, Excel IF의 동작을 그대로 가져와 설명하지 않습니다.

9. 빈 문자열까지 함께 표시해야 하는 경우

연락처가 Null이거나 ""일 때 모두 미등록으로 표시해야 한다면 IIf(Nz([연락처], "")="", "미등록", [연락처])처럼 생각할 수 있습니다. 먼저 Null을 빈 문자열로 맞춘 뒤 길이 0인 문자열과 비교하는 방식입니다.

단, 공백 한 칸인 " "은 ""와 다릅니다. 이 식은 공백만 입력된 문자열까지 자동으로 정리하지 않습니다. 공백 제거 요구가 있다면 별도의 문자열 정리 조건을 검토해야 합니다.

조건에 없는 값까지 임의로 정상화하지 않는 것이 중요합니다. 시험 문제의 'Null만', '빈 문자열도', '공백 제외'라는 표현에 밑줄을 긋고 대상 범위를 먼저 정하세요.

10. 셀프 체크: 먼저 결과를 쓰고 해설과 비교

문제 1: IsNull(0)의 결과는? 문제 2: Nz(Null, "대기")의 결과는? 문제 3: Nz("", "대기")의 결과는? 문제 4: IIf(IsNull(Null), "A", "B")의 결과는?

문제 5: 상품금액=12000, 배송비=Null일 때 [상품금액]+Nz([배송비], 0)의 결과는? 문제 6: 같은 값에서 Nz([상품금액]+[배송비], 0)의 결과는? 두 식에서 괄호가 어디까지 묶이는지 표시하세요.

문제 7: VBA에서 IIf(수량=0, 0, 금액/수량)은 0 나누기를 항상 막는가? 문제 8: Nz([연락처], "미등록")은 원본 연락처 필드를 자동 수정하는가? 반환 결과와 실행·저장 동작을 분리해서 답해 보세요.

11. 정답과 시험 직전 복습 기준

1번 False, 2번 "대기", 3번 "", 4번 "A"입니다. 3번을 틀렸다면 Null과 빈 문자열이 다르다는 기준을 다시 확인하고, 4번에서는 안쪽 IsNull을 먼저 계산하세요.

5번은 12000이고 6번은 0입니다. 7번은 아니며, VBA IIf의 양쪽 식 평가 때문에 위험한 나눗셈을 방어하는 용도로 믿으면 안 됩니다. 8번도 아닙니다. Nz는 식의 값을 반환할 뿐 레코드 저장 명령이 아닙니다.

틀린 문제 옆에 '검사·대체·분기·대체 위치·평가·저장' 중 원인을 하나 적으세요. 널문·엔대·아이갈을 말한 뒤 그 함수가 무엇을 반환하는지까지 설명할 수 있으면 다음 문제에 적용하기가 쉬워집니다.

12. 공식 근거와 적용 범위

2026년 9월 28일 Microsoft Learn의 Application.Nz (Access), IsNull function, IIf function을 확인했습니다. 각각 대체값 생략 시 문맥 차이, Null과 Empty·빈 문자열의 구별, VBA IIf의 양쪽 식 평가를 검토하는 근거입니다.

예제는 Access 표현식과 VBA 학습용으로 구성했으며 실제 Access 실행 검증이나 공식 기출 재현을 했다는 뜻은 아닙니다. 프로시저 작성 전체 순서는 관련 가이드에서 이어 보고, 이 글에서는 Null 처리 기준만 집중 복습하세요.

FAQ

자주 묻는 질문

IsNull과 Nz의 가장 큰 차이는 무엇인가요?

IsNull은 식이 Null인지 True·False로 검사합니다. Nz는 Null일 때 지정한 대체값을 반환하고, Null이 아니면 원래 값을 반환합니다. 둘 다 그 자체로 원본 필드를 저장하거나 수정하지 않습니다.

Nz 함수에서 두 번째 인수를 생략해도 0이 나오나요?

항상 숫자 0이라고 볼 수 없습니다. Access 쿼리에서는 Null 자리에 빈 문자열을 반환하며, VBA에서는 Empty가 문맥에 따라 처리됩니다. 숫자 0을 의도하면 Nz(식, 0)처럼 명시하세요.

빈 문자열도 IsNull로 확인할 수 있나요?

IsNull("")는 False입니다. Null과 길이 0인 문자열은 다르므로 문제에서 둘 다 처리하라고 했다면 비교 조건을 별도로 구성해야 합니다.

IIf로 수량이 0일 때 나눗셈 오류를 막을 수 있나요?

VBA에서는 IIf가 양쪽 결과식을 모두 평가하므로 안전한 방어라고 볼 수 없습니다. 위험한 계산을 실행하지 않도록 If...Then...Else 블록에서 Null과 0을 먼저 검사하세요.