AccessのNz関数とはについてお探しですね。

広告

AccessでNull値に困ったら!Nz関数の使い方をやさしく解説

Microsoft Accessでデータベースを作ったり、計算をしたりしているとき、「あれ?結果が出てこない…」と困ったことはありませんか?その原因の多くは、**「Null(ヌル)」**という、データが入っていない状態にあります。

Accessでは、計算式の中に一つでもNullが混ざっていると、答え全体がNullになってしまうんです。

この記事では、そんなNull値のトラブルを防いでくれる、Accessならではの便利な機能**「Nz関数」**について、初めての人にもわかりやすく説明していきます。

Nz関数って何?Null値のエラーを防いでくれる便利な機能

Nz関数は、Microsoft Accessにもともと入っている関数の一つです。

指定したデータが「Null」かどうかをチェックして、もしNullだったら、別の値(0や空っぽの文字など)に変えてくれる、とっても便利な機能なんです。

Accessでデータベースを使っていると、Null値ってけっこう厄介なんですよね。

例えば、売上金額と消費税を足し算するとき、片方が未入力(Null)だと、本当はそのままの金額を表示してほしいのに、計算結果自体が真っ白(Null)になってしまいます。

これを**「Nullの伝播(でんぱ)」**と呼びます。

SQL ServerやOracleといった他のデータベースシステムでは、似たような機能として「ISNULL関数」や「COALESCE関数」などがありますが、Nz関数はAccess独自のものです。

だから、AccessのクエリやVBA(Visual Basic for Applications)を使うなら、Nz関数は絶対に覚えておきたい機能なんです。

この関数をマスターすれば、空白データが混ざっているテーブルでも、エラーを起こさずにスムーズに集計したり、文字をつなげたりできるようになります。

データが欠けている可能性があるフィールドを扱うときは、いつもNz関数を使う習慣をつけておくと、後々のトラブルをぐっと減らせますよ。

Nz関数の基本的な使い方

Nz関数の使い方はとってもシンプルです。

基本の書き方は**「Nz(チェックしたい値, [Nullだったときに返す値])」**という形です。

カッコの中には、最大で二つの値を指定できます。

– **第一引数**:フィールド名や変数など、Nullかどうかをチェックしたい対象
– **第二引数**:もし第一引数がNullだったときに、代わりに表示したい値(0や空文字など)

この第二引数は省略することもできますが、思わぬ動きを防ぐために、基本的にはちゃんと指定することをおすすめします。

第二引数を省略すると、Accessが状況に応じて自動的に値を決めてくれます。

数値の計算では「0」を返し、文字列では「空文字(長さゼロの文字列)」を返します。

便利そうに見えますが、複雑な計算やVBAのコードでは、この自動判定が予想外のバグを生むこともあるんです。

なので、数値を計算するときは**「Nz([売上], 0)」**、文字をつなげるときは**「Nz([備考], “”)」**のように、目的に合わせてはっきり書く習慣をつけましょう。

日付のデータなら、**「Nz([契約日], #1900/01/01#)」**のように、影響の出ない初期日付を使うテクニックもよく使われます。

実際に使ってみよう!クエリやVBAでの活用例

ここからは、実際の作業でNz関数をどう使うのか、具体的な場面で見ていきましょう。

クエリでの計算に使う

一番よく使われるのが、クエリで計算をするときです。

たとえば、「単価」と「数量」を掛け合わせて「合計金額」を出すクエリを作ったとします。

このとき、一部の商品の数量がまだ未入力でNullだと、そのまま掛け算すると合計金額もNullになってしまいます。

これを防ぐには、計算式を**「合計金額: [単価] * Nz([数量], 0)」**と書きます。

こうすれば、数量がNullのときは0として計算されるので、合計金額も正しく0と表示されて、後の集計処理も問題なく進みます。

VBAでのエラー回避に使う

もう一つの代表的な使い道は、VBAプログラミングでのエラー回避です。

VBAでテーブルのデータを取り出して変数に入れるとき、データがNullだと「Nullの使い方が不正です」というエラーが出ることがあります。

特に、整数型(Integer)や文字列型(String)の変数にはNullを入れられないので、プログラムが止まってしまうんです。

これを防ぐために、変数に代入するときに**「strName = Nz(rs!氏名, “”)」**のようにNz関数を使っておけば、データが空でも空文字として安全に処理を続けられます。

条件分岐でも、**「If Nz(rs!ステータス, “”) = “完了” Then」**のように書けば、Nullによるエラーを避けながら、正確に条件を判定できます。

クエリとVBAの両方でNz関数を使いこなせれば、安定したAccessシステムが作れますよ。

Nz関数を使うときの注意点

Nz関数はとても便利ですが、使うときに気をつけたいポイントがいくつかあります。

データ型に注意

まず一つ目は、Nz関数の結果が**「バリアント型(Variant)」**になるという点です。

バリアント型はどんなデータでも入れられる柔軟な型ですが、厳密なデータ型が必要な処理では、型が合わずにエラーになることがあります。

VBAでNz関数の結果を特定の型の変数に入れるときは、必要に応じて**CInt関数(整数に変換)**や**CStr関数(文字列に変換)**などを一緒に使って、はっきりとデータ型を変換してあげると安全です。

外部からの接続では使えないことも

二つ目の注意点は、Accessのデータベースを外から操作する場合の制約です。

Nz関数はあくまでAccessアプリケーション固有の関数なので、ExcelからADOで接続してSQLを実行したり、ODBC経由で他のシステムから使ったりするときには、Nz関数が認識されず「未定義の関数です」というエラーになることがあります。

そういう環境では、標準SQLで使える**IIf関数とIsNull関数を組み合わせて**代わりの処理をする必要があります。

具体的には**「IIf(IsNull([フィールド名]), 0, [フィールド名])」**と書けば、Nz関数と同じ判定と変換ができます。

Access内だけで使うツールなのか、外部と連携するシステムなのか、動作環境に合わせた適切な関数の使い分けを理解しておくと、トラブルが起きたときもすぐに対応できるようになります。

まとめ

Nz関数を上手に使って、エラーに強いデータベースを作っていきましょう!この記事が、皆さんのAccess作業の助けになれば嬉しいです。

広告