PR

Access VBA逆引き集|Nz関数とNull対策を完全理解する実践テクニックとCopilot活用術

VBA

Access VBAを開発していると、

  • 突然「無効な Null の使用です」が発生する
  • DLookupの結果でエラーになる
  • CSV取込後に集計処理が失敗する
  • レコードセットの値取得でエラーになる
  • フォームの未入力項目で処理が止まる

といった経験があるのではないでしょうか。

Access VBAのエラー原因の上位に入るのがNull未対策です。

そして、その解決策として最も重要なのが

Nz関数

です。

Access VBAを本格的に開発するなら、DAOよりも先に覚えた方が良いと言われるほど重要なテクニックです。


スポンサーリンク

Nullとは何か

初心者が最初につまずくポイントです。

例えばフォームで

顧客名

を入力しなかった場合、

値は

“”

ではなく

Null

になります。


Nullと空文字は違う

よく誤解されます。

空文字

“”

意味

文字はある

長さ0

です。


Null

Null

意味

値が存在しない

です。


Nullが危険な理由

例えば

Dim strName As String

strName = rs!顧客名

顧客名がNullの場合、

実行時エラー

が発生することがあります。


Nz関数とは

Null対策の定番です。

構文

Nz(値, 置換値)


例

Nz(Null, "")

結果

“”

になります。


逆引き① Nullを空文字へ変換したい

最も利用されます。

strName = _

Nz(rs!顧客名, "")

結果

Null → “”

東京商事 → 東京商事


逆引き② Nullを0へ変換したい

数値項目です。

lngAmount = _

Nz(rs!売上金額, 0)

結果

Null → 0

になります。


逆引き③ DLookupを安全に使いたい

初心者がよく遭遇する問題です。

危険なコード

strName = _

DLookup("顧客名", "T_CUSTOMER", "顧客コード='C001'")

検索対象が存在しないと

Null

になります。


安全なコード

strName = _

Nz(DLookup("顧客名", "T_CUSTOMER", "顧客コード='C001'"), "")

逆引き④ DAO Recordsetを安全に扱う

実務で非常に多いです。

危険

strCustomer = _

rs!顧客名

安全

strCustomer = _

Nz(rs!顧客名, "")

逆引き⑤ 計算処理で使いたい

金額集計です。

lngTotal = _

Nz(rs!売上金額, 0) + Nz(rs!消費税, 0)

メリット

Nullが混ざっても計算できます。


Null判定をしたい

IsNull関数です。

If IsNull(rs!顧客名) Then

End If

用途

Nullか確認


用途の違い

IsNull

判定


Nz

変換

です。


実務活用例① CSV取込システム

CSVに空欄があるケースです。


対策

strTel = _

Nz(rs!電話番号, "")

効果

取込エラー防止


実務活用例② 顧客管理システム

担当者未入力です。

strUser = _

Nz(rs!担当者, "")

効果

画面エラー防止


実務活用例③ 売上管理システム

金額集計です。

lngSales = _

Nz(rs!売上金額, 0)

効果

集計エラー防止


実務活用例④ 設備管理システム

点検日未登録です。

If IsNull(rs!点検日) Then

End If

効果

未点検抽出


実務活用例⑤ ログ管理

コメント未入力です。

strComment = _

Nz(rs!コメント, "")

効果

履歴表示安定化


DAO開発で必須の書き方

DAO記事でも紹介したRecordset処理です。

推奨

Do Until rs.EOF

    strCode =  Nz(rs!顧客コード, "")

    strName =  Nz(rs!顧客名, "")

    lngAmount =  Nz(rs!売上金額, 0)

    rs.MoveNext

Loop

効果

圧倒的に安定します。


ベテラン開発者の定番ルール

フォーム参照時です。

悪い例

If Me!売上金額 > 0 Then

良い例

If Nz(Me!売上金額, 0) > 0 Then

フォーム値は基本的に

Nz

で囲むことが多いです。


Null対策テンプレート

実務でそのまま使えます。

文字列

Nz(値, “”)


数値

Nz(値, 0)


真偽値

Nz(値, False)


日付

If Not IsNull(日付) Then

Copilot活用術① Null対策レビュー

Copilotへの依頼例です。

Access VBAです。

Nullエラーになる可能性がある箇所を

指摘してください。


Copilot活用術② Nz自動追加

以下のDAOコードへ

Nz関数を利用した

Null対策を追加してください。


Copilot活用術③ CSV取込対策

CSV取込処理です。

Nullエラーが出ないように

改善してください。

非常に相性が良いテーマです。


Null対策でよくあるミス

空文字と比較

危険です。

If rs!顧客名 = "" Then

安全

If Nz(rs!顧客名, "") = "" Then

Null対策が重要なシステム

特に重要なのは次のシステムです。

  • CSV取込システム
  • 顧客管理システム
  • 設備管理システム
  • 売上管理システム
  • ログ管理システム
  • バッチ処理

開発現場での利用頻度

順位用途
1位DAO Recordset
2位フォーム値取得
3位DLookup
4位CSV取込
5位集計処理

Access VBA開発では毎日利用します。


まとめ

Null対策はAccess VBA開発における最重要テクニックの一つです。

特に覚えておきたいのは次の3つです。

Nz(値,””)

Nz(値,0)

IsNull(値)

これだけで、

  • DAOエラー防止
  • CSV取込エラー防止
  • DLookupエラー防止
  • フォーム入力エラー防止

が実現できます。

Access VBA初心者の方ほど、まずは

Nz

を徹底的に使う習慣を付けることをおすすめします。

システムの安定性が大きく向上し、運用後のトラブルも大幅に減らすことができます。

Access VBA逆引き大全 600の極意 Microsoft365/Office2024/2021/2019/2016対応 | E-Trainer.jp[中村峻] |本 | 通販 | Amazon
AmazonでE-Trainer.jp[中村峻]のAccess VBA逆引き大全 600の極意 Microsoft365/Office2024/2021/2019/2016対応。アマゾンならポイント還元本が多数。E-Trainer.jp[中…

コメント

タイトルとURLをコピーしました