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作業の助けになれば嬉しいです。
広告
