ACCESS VBA Nullを判定するIsNull関数

Nullを判定するIsNull関数

ACCESSを始めとしたデータベースにおいて、値が空白(Null)かどうかは重要です。
何らかの値が入る前提で作成した処理が、値がないために全く想定通りに動作しないことは日常茶飯事です。

また、Nullか否かの判定を行って、その結果によって以後の処理を分岐させるシーンは多いでしょう。

今回は、Nullの判定に使用する、IsNull関数をご説明します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。

Nullだと困ること

Nullはなぜ判定する必要があるのでしょう?

それは、想定外のNullはACCESSの運用に多大な影響を与えるためです。

例えば、以下のようなリレーションシップを設定したクエリを作成します。

売上テーブルと顧客テーブル間が、顧客IDでリレーション設定されている、よくあるケースだと思います。

一般的にリレーションの設定は、「両方のテーブルの結合フィールドが同じ行だけを含める」を選択するはずです。

この状態で、TRN_売上に顧客IDが入力されていないレコードがあるとどうなるでしょう?

そのレコードはリレーションが成立しないので、クエリの結果に表示されません。
クエリを基に売上一覧のようなフォームを作っている場合、そのフォームにも表示されなくなってしまうのです。

例えば、以下の例ではテーブルには売上ID:16があります。
顧客IDに何も入っていないのでNullになっています。

しかし、クエリには顧客IDによるリレーションが設定できていないため、売上ID:16が表示されません。

この状態では困りますよね。

しかもさらに悩ましいのが、この状況に対するエラーは表示されない、ということです。
クエリは 両方のテーブルの結合フィールドが同じ行だけを含める」という設定に忠実に処理しているだけで、値がないからエラーとは判断しないのです。

つまり、このようにクエリ側で一部レコードの欠損があっても、開発者も利用者も非常に気づきにくいのです。

これを避けるためには特にリレーションシップを設定したフィールドについては徹底的にNullになってしまうことを防がなければいけません。

そこで活用するのがIsNull関数なのです。

IsNull関数の構文

IsNull ( 判定する値 )

IsNull関数はシンプルで、引数は判定する値のみです。
判定する値がNullであればTrue、NullでなければFalseが返されます。

使用例

今回はサンプルとして下記のフォームを作成しました。

テキスト欄がNullかどうかを、判定ボタンを押して判定します。
判定ボタンのクリック時イベントには以下のコードを設定しました。


    If IsNull(テキスト) = True Then
    
        MsgBox "Nullです。", vbOKOnly + vbInformation, "Null判定"
    
    Else
    
        MsgBox "Nullではありません。", vbOKOnly + vbInformation, "Null判定"
    
    End If

IsNull関数がTrueを返す場合とFalseを返す場合をIF文で条件分岐させて、表示するメッセージを変えています。

実際に動作を見てみましょう。
Nullの場合は、

Nullでない場合は、

というようにメッセージが出し分けられました。

IsNull関数の利用シーン

IsNull関数は上記でご紹介したようなメッセージのだし分けよりは、エラー判定に利用されることの方が多いです。

例えば、フォームに必須で入力してほしい項目がある場合、フォームを閉じる際のイベントに該当項目に対してIsNull関数を使用してNullチェックを行い、Nullであればエラーメッセージを出してフォームを閉じさせない、という利用法があります。

または、フォームの状態が未入力状態なのか、入力された状態なのかの判定にも利用できます。
例えば、下記は売上入力のフォームです。

このフォームの主キーは売上IDですが、フォームを開いて未入力の状態では上記のように主キーの項目は新規と表示されます。
実際にデータが入力されるとオートナンバーで主キーが採番されてここが数値に変わるわけですが、主キーが未採番の状態なのか、採番された状態なのかを判定するのにもIsNull関数を利用できます。

IsNull関数は、データベースの主要機能に利用されることよりも、より使いやすさを向上させるためのエラーチェックなどに利用されることが多いものです。

ぜひうまく使いこなして、ご自身の作成したデータベースをもう一段使いやすくして見て下さい。

以上、Nullを判定するIsNull関数をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。