Accessを使っていると、フォームのテキストボックスが空白のまま演算に使われてエラーになったり、クエリの合計が期待より小さかったり、IIf関数が意図しない分岐をしたりといったトラブルに出くわします。その原因のほとんどはNull値の扱いにあります。
ExcelではA1セルが空白のとき「0」や「””」として計算してくれる場面が多いですが、AccessはNull(値が存在しない状態)を厳密に管理します。Nullは「0でも空文字でもない、データそのものが未入力」を意味し、Null + 1 の結果はエラーではなく Null になります。これをVBA・クエリ・フォーム上で安全に処理するために使うのが IsNull関数とNz関数です。
本記事ではIsNull・Nzの構文・戻り値の仕組みから、クエリ条件・フォーム表示・集計計算・MOS試験頻出問題まで体系的に解説します。

NullとはAccess特有の「値なし」状態
Accessのテーブルフィールドには「必須入力」プロパティをオフにした場合、データが入力されていないとNullが格納されます。Nullは次のような特別な性質を持ちます。
| 比較 | 結果 | 理由 |
|---|---|---|
| Null = 0 | False | Nullは0ではない |
| Null = “” | False | Nullは空文字でもない |
| Null = Null | Null(不定) | Null同士の比較もNullを返す |
| Null + 100 | Null | 算術演算にNullが含まれると結果もNull |
| Is Null | True/False | Nullかどうかを確認する正しい書き方 |
特に「Null = Null」が不定(True にならない)という点がトラブルの元です。クエリの抽出条件で = "" と書いても、Nullレコードは引っかかりません。Nullを検索・処理するには専用の構文が必要です。
IsNull関数の構文と基本的な使い方
IsNull関数はAccessとVBA両方で使える関数で、対象の式がNullかどうかを確認し、TrueまたはFalseを返します。
構文
IsNull(式)
| 引数 | 内容 |
|---|---|
| 式 | フィールド名・コントロール名・変数・任意の式 |
戻り値は True(Nullである)または False(Nullでない)です。
クエリの演算フィールドでの使用例
クエリデザインビューの「フィールド」行に以下のように記述します。
確認: IIf(IsNull([備考]),"未入力","入力済み")
[備考]フィールドがNullなら「未入力」、そうでなければ「入力済み」と表示する演算フィールドです。IsNull を IIf の第1引数(条件式)として使うのが最も多いパターンです。
クエリの抽出条件でのNull検索
抽出条件にNullを検索する場合は Is Null、Nullでないレコードは Is Not Null と入力します(スペースに注意)。
| 目的 | 抽出条件欄の入力 |
|---|---|
| Nullのレコードだけ取得 | Is Null |
| Nullでないレコードだけ取得 | Is Not Null |
| Nullまたは空文字のレコードを取得 | Is Null Or “” |
= Null や <> Null と書いても正しく動作しません。クエリで Null を扱うときは必ず Is Null / Is Not Null を使います。

Nz関数の構文と基本的な使い方
Nz関数は「Null→ゼロ(Null→Zero)」の頭文字が由来で、NullをあらかじめデフォルトのNullでない値に置き換える関数です。IsNullで真偽を判定するより、直接「Nullだったら代替値を使う」という処理に向いています。
構文
Nz(式 [, ValueIfNull])
| 引数 | 省略 | 内容 |
|---|---|---|
| 式 | 不可 | Nullかどうか確認したいフィールド・変数・式 |
| ValueIfNull | 省略可 | Nullのときに代わりに返す値。省略すると数値型なら0、文字列型なら”” |
クエリでの使用例
合計金額: Nz([数量],0) * Nz([単価],0)
[数量]か[単価]のどちらかがNullでも、0として計算するため結果はNullではなく0になります。Nullのままだと乗算結果もNullになってしまうのでこのパターンは非常に頻出です。
担当者表示: Nz([担当者名],"(未割り当て)")
[担当者名]がNullのとき「(未割り当て)」と表示します。第2引数で文字列を渡す場合は引用符で囲みます。

IsNullとNzの使い分けポイント
| 関数 | 戻り値 | 向いている場面 |
|---|---|---|
| IsNull | True / False | Nullかどうかで分岐したい(IIf・If文の条件判定) |
| Nz | 元の値 or 代替値 | Nullを即座に0・空文字・任意の値に変換して計算や表示に使いたい |
「Nullのとき何かをする・しない」という判定が目的ならIsNull、「Nullを別の値として扱いたい」という変換が目的ならNzが適しています。組み合わせて使うことも多くあります。
PR
MOS Access 365&2019 Expert 対策テキスト&問題集(よくわかるマスター/富士通ラーニングメディア)
MOS Access試験の出題範囲を体系的に演習できる公式教材シリーズ。テーブル・クエリ・フォーム・レポートの操作を試験形式で確認できます。
実務パターン別の活用例5選
パターン① 未入力チェックフラグをクエリに追加する
顧客テーブルの[電話番号]が未入力のレコードを見つけて「要確認」フラグを立てます。
要確認: IIf(IsNull([電話番号]),"◯","")
クエリ結果を担当者に共有するとき、[要確認]列に「◯」がついているレコードが一目でわかります。
パターン② 集計クエリでNullを0として合計する
SUM関数はNullを無視して合計しますが、グループ間の差を計算するとき「合計がNullになるグループ」が生まれることがあります。
売上合計: Nz(Sum([売上金額]),0)
Sum([売上金額])がNullを返してしまった場合でも、Nzで0に変換して後段の比較計算が壊れないようにします。
パターン③ フォームのテキストボックスがNullのまま計算されるのを防ぐ
フォームで[数量]と[単価]を入力して[合計]テキストボックスに自動計算させる場面です。コントロールソースに直接式を書く場合:
=[数量]*[単価]
これだと[数量]か[単価]が未入力のままだと#Errorが表示されます。次のように書き換えます。
=Nz([数量],0)*Nz([単価],0)
片方が未入力でも0として計算し、エラー表示が出なくなります。
パターン④ IIf+IsNullで担当者未割当の行をハイライトするレポートを作る
レポートの条件付き書式機能では「フィールドの値が」条件のほかに「式が」条件でIsNullが使えます。[担当者名] Is Nullを条件に指定して、背景色を赤にすれば未割当行を一目で確認できます。または演算フィールドとして以下を設け、そのフィールドを条件付き書式のトリガーにします。
IsNull([担当者名])
パターン⑤ NULL値が含まれる文字列連結でエラーにしない
クエリやフォームで姓と名を結合して氏名を作る場合、どちらかがNullだと文字列演算子(&)の結果がNullになります。
氏名: Nz([姓],"") & " " & Nz([名],"")
姓または名がNullでも空文字として連結するため、結果は常に文字列になります。

フォームコントロールのNull操作実践
フォームのテキストボックスはコントロールソースにフィールドを紐づけているとき、未入力レコードの値はNullになります。VBAでコントロールの値を読み取るときは次の対処が必要です。
VBAでNullを判定して処理する
If IsNull(Me![数量]) Then
MsgBox "数量を入力してください"
Me![数量].SetFocus
Exit Sub
End If
[数量]テキストボックスが未入力(Null)の場合にメッセージを表示してフォーカスを戻す処理です。フォームのBeforeUpdateイベントや保存ボタンのClickイベントに記述します。
Nzで変数に代入する
Dim lngQty As Long
lngQty = Nz(Me![数量], 0)
Nullを型付き変数(Long型など)に代入しようとするとエラーになります。Nzで0に変換してから代入するとエラーが回避できます。
テキストボックスの既定値でNullを防ぐ
フォームのコントロールプロパティ「既定値」に 0 や "" を設定しておくと、新規レコード入力時のNullを最初から回避できます。ただしNullと0・空文字は意味が異なる場合があるため、「未入力なのか0を入力したのか区別したい」フィールドには既定値を設定しないよう注意します。
クエリSQL文でNullを扱う
SQLビューで直接SQL文を記述する場合のNull操作構文をまとめます。
| 目的 | SQL記述例 |
|---|---|
| Nullのレコードを抽出 | WHERE [フィールド] IS NULL |
| Nullでないレコードを抽出 | WHERE [フィールド] IS NOT NULL |
| NullをSQLで置換(IIf利用) | IIf(IsNull([フィールド]),0,[フィールド]) |
| NullをSQLで置換(Nz利用) | Nz([フィールド],0) |
標準SQLには COALESCE や ISNULL 関数があり、SQL ServerやMySQLではこれらが使えます。ただしAccessのJet/ACEエンジンでは COALESCE はサポートされず、AccessのSQL環境内では Nz または IIf(IsNull(...))... を使います。
Null関連でよくあるエラーと対処一覧
| 症状 | 原因 | 対処 |
|---|---|---|
| 演算フィールドが#Errorになる | 演算に使うフィールドのどれかがNull | Nzで0または空文字に変換してから演算 |
| IIfが意図しない分岐をする | 条件式に「= Null」を使っている | IsNull([フィールド])に書き換える |
| SUM集計の結果がNullになるグループがある | 対象レコードが1件もなく集計値がNull | Nz(Sum([フィールド]),0)でラップ |
| VBAでType Mismatchエラー | Null値を型付き変数に直接代入した | Nzで変換してから代入 |
| Is Nullで抽出しても件数が合わない | Nullと空文字(””)が混在している | Is Null Or “”の複合条件を使う |
| 文字列連結結果がNullになる | &演算子にNullが含まれる | Nz([フィールド],””)で空文字に変換してから連結 |
PR
今すぐ使えるかんたん Access 2024[Office 2024/Microsoft 365 両対応](井上香緒里)
画面手順つきでデータベース設計から実務操作まで解説する入門書。用語につまずきやすいAccess初学者に向いています。
IsNull・NzとMOS Access試験の出題傾向
MOS Access 365(またはAccess 2019)の試験では、クエリの演算フィールドや抽出条件にNullが絡む問題は比較的高い頻度で出題されます。試験対策として押さえておくべきポイントを整理します。
MOS試験頻出チェックリスト
| チェック項目 | 正しい操作 |
|---|---|
| Nullを含むフィールドをクエリで抽出するとき | 抽出条件欄に「Is Null」と入力する(「= Null」は誤り) |
| Nullでないレコードを抽出するとき | 抽出条件欄に「Is Not Null」と入力する |
| Nullがあっても演算を止めない演算フィールド | Nz([フィールド],0)を演算式の中で使う |
| IsNullをIIfと組み合わせて表示を切り替える | IIf(IsNull([フィールド]),”値なし”,[フィールド])の形式で記述できる |
| フィールドのNullを許可するかどうかの設定場所 | テーブルデザインビューの「フィールドサイズ」下部「必須入力」プロパティ |
| テキスト型フィールドでNullと空文字を区別する設定 | 「空文字列の許可」プロパティをYes/Noで制御する |
試験問題でよく問われるケース
MOS試験では「特定フィールドが入力されていないレコードを一覧で表示せよ」という形で出題されます。抽出条件欄に Is Null と入力するのが正解で、選択肢問題の場合は = "" や = Null がひっかけとして並ぶことがあります。
また、演算フィールドを作成して「Nullの場合は代替テキストを表示する」問題では、IIf(IsNull([担当者]),"未定",[担当者]) のような式を書かせる問題が出ます。Nz関数は覚えておくと式を短く書けますが、試験環境ではIIf+IsNullの組み合わせでも得点できます。
IsNull・Nzを使った実践演習シナリオ
次のシナリオで手を動かして理解を深めましょう。
演習1 受注テーブルの未入力件数を把握するクエリ
受注テーブルに [出荷日] フィールドがあります。まだ出荷されていないレコードは[出荷日]がNullです。
- 「作成」タブ→「クエリデザイン」を開く
- 受注テーブルを追加して [受注ID] と [出荷日] をグリッドに追加する
- [出荷日]の「抽出条件」欄に
Is Nullと入力する - データシートビューに切り替えて未出荷レコードが表示されるか確認する
- 「クエリデザイン」タブ→「集計」ボタンをオンにして、[受注ID]の「集計」をCountに変更し、件数を取得する
演習2 売上テーブルで割引額がNullのレコードを0として合計する
売上テーブルに [売上金額] と [割引額] があります。[割引額]がNullのレコードが混在しています。
- クエリデザインで売上テーブルを追加する
- 演算フィールド欄に次の式を入力する
実売上: [売上金額] - Nz([割引額],0)
- データシートビューで [実売上] 列が正しく計算されることを確認する
- 集計欄でSumを選んで合計値を求める
演習3 フォームで必須項目チェックをVBAで実装する
- フォームをデザインビューで開く
- フォームの BeforeUpdate イベントに以下を入力する
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me![顧客名]) Then
MsgBox "顧客名は必須です", vbExclamation
Me![顧客名].SetFocus
Cancel = True
End If
End Sub
- フォームを実行して[顧客名]を空白のまま移動しようとするとメッセージが出ることを確認する
テーブル設計でNullを適切に制御する
Null問題の多くはテーブル設計段階で防げます。フィールドのプロパティを正しく設定することで、そもそもNullが格納されない構造を作れます。
| プロパティ | 設定値 | 効果 |
|---|---|---|
| 必須入力 | はい | Nullの格納を禁止する。未入力のままレコードを保存しようとするとエラーになる |
| 空文字列の許可(テキスト型のみ) | いいえ | 空文字(””)の格納も禁止する。NullでもなくNullでもある中間状態を防ぐ |
| 既定値 | 0 または “” | 新規レコードに自動で既定値が入るため入力忘れを防げる |
| 入力規則 | Is Not Null | Nullを明示的に禁止するバリデーションルール |
ただし「本当にデータが存在しない(未入力)」と「0や空文字が正しく入力されている」を区別したい場面では、あえてNullを許可する設計が適切です。たとえば体重測定フィールドは「未測定(Null)」と「測定値が0kg(現実上はあり得ないが)」を区別できます。Nullをすべて0に変換するのではなく、業務要件に応じて設計を選びます。
まとめ:IsNull・Nzを使いこなしてAccessの信頼性を高める
Accessにおける Null 値の扱いは、初心者がつまずきやすい代表的なポイントです。重要なポイントを整理します。
- NullはExcelの空白セルと異なり、「値そのものが存在しない」状態であり、算術演算に加わるとすべての結果がNullになる
- IsNull関数はNullかどうかを True/False で返す。クエリの抽出条件では
Is Null/Is Not Nullを使う(= Nullは動作しない) - Nz関数はNullを任意の値(数値なら0、文字列なら””など)に置き換えて演算や表示に使う
- IsNullはIIfと組み合わせて「Nullなら別の表示をする」演算フィールドに使い、NzはNullをそのまま置換して計算を続けたいときに使う
- テーブル設計段階で「必須入力」「空文字列の許可」「既定値」を適切に設定するとNull問題を源流で防げる
- MOS試験では「Is Null」の抽出条件記述と「IIf+IsNull」の演算フィールド式が頻出
IsNullとNzをマスターすることで、Accessデータベースの計算エラーやフォームの入力漏れ対策が格段に改善します。まずは自分が管理しているAccessデータベースのクエリを見直し、= Null の記述や演算エラーが発生しているフィールドにNzを適用してみましょう。
