ACCESS VBA Nullを判定するIsNull関数
ACCESSを始めとしたデータベースにおいて、値が空白(Null)かどうかは重要です。
何らかの値が入る前提で作成した処理が、値がないために全く想定通りに動作しないことは日常茶飯事です。
また、Nullか否かの判定を行って、その結果によって以後の処理を分岐させるシーンは多いでしょう。
今回は、Nullの判定に使用する、IsNull関数をご説明します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。
Null(ヌル)とは
Nullとはプログラミングやデータベースで一般的に利用される用語で、何のデータも含まれていない状態を指します。
ACCESSの場合ではテーブルやフォームのテキストボックスに入力された値が何もない場合にNullになります。
概念が少し難しいのですが、例えば数値型のフィールドの場合に0が入っていたり、テキスト型のフィールドの場合に空白(””)が入っていたりするのとはまた別で、NullはNullとして捉えられます。
特にテキスト型の空白とは見た目だけで判別できないので注意が必要です。
Nullだと困ること
Nullはなぜ判定する必要があるのでしょう?
それは、想定外のNullはACCESSの運用に多大な影響を与えるためです。
例えば、以下のようなリレーションシップを設定したクエリを作成します。
売上テーブルと顧客テーブル間が、顧客IDでリレーション設定されている、よくあるケースだと思います。
一般的にリレーションの設定は、「両方のテーブルの結合フィールドが同じ行だけを含める」を選択するはずです。
この状態で、TRN_売上に顧客IDが入力されていないレコードがあるとどうなるでしょう?
そのレコードはリレーションが成立しないので、クエリの結果に表示されません。
クエリを基に売上一覧のようなフォームを作っている場合、そのフォームにも表示されなくなってしまうのです。
例えば、以下の例ではテーブルには売上ID:16があります。
顧客IDに何も入っていないのでNullになっています。
しかし、クエリには顧客IDによるリレーションが設定できていないため、売上ID:16が表示されません。
この状態では困りますよね。
しかもさらに悩ましいのが、この状況に対するエラーは表示されない、ということです。
クエリは 両方のテーブルの結合フィールドが同じ行だけを含める」という設定に忠実に処理しているだけで、値がないからエラーとは判断しないのです。
つまり、このようにクエリ側で一部レコードの欠損があっても、開発者も利用者も非常に気づきにくいのです。
これを避けるためには特にリレーションシップを設定したフィールドについては徹底的にNullになってしまうことを防がなければいけません。
そこで活用するのがIsNull関数なのです。
IsNull関数の構文
IsNull関数はその名前からもわかりますが、Nullを判定する関数です。
IsNull ( 判定する値 )
IsNull関数はシンプルで、引数は判定する値のみです。
判定する値がNullであればTrue、NullでなければFalseが返されます。
使用例
ではIsNull関数を使ってNullを判定する実践例をご紹介しましょう。
今回はサンプルとして下記のフォームを作成しました。
テキスト欄がNullかどうかを、判定ボタンを押して判定します。
判定ボタンのクリック時イベントには以下のコードを設定しました。
If IsNull(テキスト) = True Then
MsgBox "Nullです。", vbOKOnly + vbInformation, "Null判定"
Else
MsgBox "Nullではありません。", vbOKOnly + vbInformation, "Null判定"
End If
IsNull関数がTrueを返す場合とFalseを返す場合をIF文で条件分岐させて、表示するメッセージを変えています。
実際に動作を見てみましょう。
Nullの場合は、
Nullでない場合は、
というようにメッセージが出し分けられました。
実際にはNullの場合のみエラーメッセージを出してユーザーに通知するという使い方が多いでしょう。
IsNull関数の利用シーン
IsNull関数は上記でご紹介したようなメッセージの出し分けよりは、エラー判定に利用されることの方が多いです。
例えば、フォームに必須で入力してほしい項目がある場合、フォームを閉じる際のイベントに該当項目に対してIsNull関数を使用してNullチェックを行い、Nullであればエラーメッセージを出してフォームを閉じさせない、という利用法があります。
または、フォームの状態が未入力状態なのか、入力された状態なのかの判定にも利用できます。
例えば、下記は売上入力のフォームです。
このフォームの主キーは売上IDですが、フォームを開いて未入力の状態では上記のように主キーの項目は新規と表示されます。
実際にデータが入力されるとオートナンバーで主キーが採番されてここが数値に変わるわけですが、主キーが未採番の状態なのか、採番された状態なのかを判定するのにもIsNull関数を利用できます。
IsNull関数は、データベースの主要機能に利用されることよりも、より使いやすさを向上させるためのエラーチェックなどに利用されることが多いものです。
ぜひうまく使いこなして、ご自身の作成したデータベースをもう一段使いやすくして見て下さい。
以上、Nullを判定するIsNull関数をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。