AccessでNullを0に変換する方法をお探しですね。

広告

Accessで計算エラーが出たら「Null」を疑おう!Nz関数で0に変換する方法

Accessでテーブルのデータを集計したり、クエリで計算したりしているとき、なぜか結果がエラーになったり、何も表示されなくなったりして困ったことはありませんか?実は、その原因の多くは「Null(ヌル)」という特殊な空データが隠れているからなんです。

この記事では、Accessの実務でとても役立つ「Nz関数」を使って、Nullを自動的に「0」に変換し、計算エラーを防ぐ方法を分かりやすく解説します。

クエリやVBAでの対処法はもちろん、一時的な変換と根本的なデータ修正の使い分けまで、しっかり理解できるようになりますよ。

1. 計算エラーの犯人「Null」って何者?

Accessで売上データや在庫データを計算していると、一部のレコードだけ計算結果が空白になったり、「#エラー」と表示されたりすることがあります。

この原因のほとんどは、フィールドに値がまったく入っていない状態、つまり「Null(ヌル)」が潜んでいるからです。

Nullは数値の「0」や文字列の「空文字(””)」とは全然違うもので、「値がまだ決まっていない」「不明」という意味を持っています。

だから、普通の計算にNullが一つでも混ざると、Accessは「計算できません」と判断して、結果もNullで返してしまうんです。

これが厄介なところなんですね。

例えば、「単価×数量=金額」を計算するクエリを作ったとします。

単価が1000円でも、数量がNullだと、結果は0円ではなく「未定義」扱いになり、画面には何も表示されません。

複数のフィールドを足し算するときも同じです。

一部のデータが欠けているだけで、全体の集計がうまくいかなくなってしまいます。

この問題を解決して正確な計算結果を得るには、計算する前にNullを「0」として扱えるようにする工夫が必要です。

そこで活躍するのが、Accessに最初から用意されている「Nz関数」という便利な機能なんです。

2. Nz関数でNullを「0」に変換しよう(クエリ編)

Nz関数は、指定したフィールドや変数の値がNullだったときに、代わりの値に置き換えてくれる関数です。

クエリでこのNz関数を使えば、テーブルの元データは変えずに、表示や計算のときだけNullを「0」として扱えます。

使い方はとてもシンプルで、「Nz(チェックしたいフィールド名, Nullのときに返す値)」という形で書きます。

数値フィールドでNullを0にしたいなら、「Nz([数量], 0)」と指定するだけ。

これで、データが空欄のレコードも安全に計算できるようになります。

実際にクエリのデザインビューで計算フィールドを作るときは、この関数を組み合わせて式を書きます。

例えば、商品価格と送料を足して合計金額を出すなら、「合計金額: Nz([価格], 0) + Nz([送料], 0)」と入力します。

こう書いておけば、送料が入力されていない(Nullの)レコードがあっても、送料を0円として計算してくれるので、ちゃんと合計金額が表示されます。

Nz関数を使わずに「[価格] + [送料]」だけにすると、送料がNullの行は合計金額も空欄になってしまうので要注意です。

数値計算をするフィールドでは、予防策としてNz関数を使っておくのがAccessの基本ルールと言えますね。

3. VBAやSQLでもNz関数は大活躍!使うときの注意点

Nz関数はクエリだけでなく、VBA(Visual Basic for Applications)のコードや、直接SQL文を書くときにもよく使います。

VBAでテーブルから取得した値を変数に入れようとしたとき、その値がNullだと「Nullの使い方が不正です」というエラーでプログラムが止まってしまうことがあります。

こんなトラブルを防ぐため、データベースから値を読み込むときは、必ずNz関数を通してから変数に入れる習慣をつけておくと安心です。

また、Nz関数は数値を「0」に変えるだけでなく、文字列フィールドに対して特定の文字を返すこともできます。

**使い方の例:**
* 数値を0に変換:`Nz([売上], 0)`
* 文字列を空文字に変換:`Nz([備考], “”)`
* 特定のメッセージを表示:`Nz([担当者], “未設定”)`

このように、データの種類に合わせて適切な代わりの値を指定すれば、もっと柔軟にデータを扱えます。

特にExcelにデータを出力するときなど、Nullのままだとレイアウトが崩れたり型がおかしくなったりするので、事前にNz関数で整えておくととても便利です。

ただし、VBAでNz関数を使うときは、受け取る変数のデータ型(IntegerやStringなど)と、Nz関数が返す代わりの値の型をちゃんと合わせる必要があります。

数値を入れるInteger型の変数に対して、「”未入力”」という文字列を指定してしまうと、型が合わないエラーが出てしまいます。

Nz関数はとても便利ですが、どんなデータ型として処理したいのかを常に意識して、代わりの値(第二引数)を省略せずにきちんと指定することが、しっかりしたシステムを作るポイントです。

4. テーブルのデータ自体を「0」に書き換える方法

ここまで説明してきたNz関数は、クエリの実行時やプログラムの処理中に「一時的にデータを読み替える」方法です。

だから、テーブルに保存されている元データ自体はNullのままです。

でも、運用の都合や他のシステムとの連携を考えて、テーブルの中のNullそのものを完全になくして、実際に「0」を書き込みたいこともあるでしょう。

そんな根本的なデータ修正をしたいときは、Nz関数ではなく「更新クエリ(UPDATE文)」を使うのが正解です。

更新クエリで特定フィールドのNullを一括で「0」に置き換える作業は、SQLビューで数行のコマンドを書くだけで簡単にできます。

具体的には、「UPDATE テーブル名 SET フィールド名 = 0 WHERE フィールド名 IS NULL;」という文です。

このSQLを実行すると、条件に合うNullのレコードだけが瞬時に見つかり、該当箇所に実際の数値「0」が上書き保存されます。

Accessの画面から更新クエリを作る場合は、デザインビューで対象フィールドを追加し、抽出条件に「Is Null」、レコードの更新に「0」と入力して実行ボタンを押せばOKです。

ただし、更新クエリによるデータの一括置換は元に戻せない操作です。

一度実行すると、元のNullの状態(未入力だったのか、後から消したのか)に戻すことはできません。

計算エラーを防ぐ目的なら、まずはNz関数で表示上の対応をして、どうしても物理的にデータを置き換える必要があるときだけ更新クエリを使う、という使い分けがおすすめです。

また、テーブルのデータを直接書き換える前には、万が一のミスに備えて、必ずデータベースファイル全体や対象テーブルのバックアップを取ってから作業してくださいね。

まとめ

Accessの計算エラーの多くはNullが原因です。

Nz関数を使えば、一時的にNullを0に変換して計算できます。

根本的に直したいときは更新クエリを使いましょう。

でも、まずはNz関数で対応するのが安全です!

広告