Access VBAを開発していると、
- 入力されていないデータでエラーになる
- 比較処理で突然エラーが発生する
- 計算結果が空になる
- CSV取込後の集計で不具合が発生する
- DLookupで取得した値がNullになる
といった問題によく遭遇します。
Access VBA開発においてNz関数は必須レベルの関数です。
実際に運用開始後の障害原因を調べると、多くのケースでNull未対策が原因になっています。ベテラン開発者ほどNz関数を日常的に利用しています。 [latest-inf…system.com]
- Nz関数とは
- なぜNullが危険なのか
- 逆引き① Nullなら0にしたい
- 逆引き② Nullなら空文字にしたい
- 逆引き③ 比較処理でエラーを防ぎたい
- 逆引き④ 計算処理で利用したい
- 逆引き⑤ DLookup結果を安全に取得したい
- 逆引き⑥ 日付項目を確認したい
- Nullと空文字の違い
- IsNullとの違い
- 実務活用例① CSV取込システム
- 実務活用例② 顧客管理システム
- 実務活用例③ 売上管理システム
- 実務活用例④ フォーム検索
- 実務活用例⑤ ログ出力
- Nz関数を使わない場合のトラブル
- ベテラン開発者の定番パターン
- Copilot活用術① Null対策レビュー
- Copilot活用術② Nz追加依頼
- Copilot活用術③ DLookup改善
- Nz関数利用時の注意点
- 開発現場での利用頻度
- Nz関数を覚えるメリット
- まとめ
Nz関数とは
Nz関数は
Null
↓
指定した値へ変換
する関数です。
基本構文
Nz(値, 変換値)
例
Nz(Me!数量, 0)
結果
Null → 0
10 → 10
なぜNullが危険なのか
Accessでは未入力データはNullになります。
例えば
If Me!数量 > 0 Then
数量がNullの場合
実行時エラー
となることがあります。
逆引き① Nullなら0にしたい
最も利用頻度が高いパターンです。
lngQty = Nz(Me!数量, 0)
結果
Null → 0
逆引き② Nullなら空文字にしたい
文字列処理です。
strName = Nz(Me!顧客名, "")
結果
Null → “”
逆引き③ 比較処理でエラーを防ぎたい
悪い例です。
If Me!金額 > 1000 Then
良い例です。
If Nz(Me!金額, 0) > 1000 Then
逆引き④ 計算処理で利用したい
金額計算です。
lngTotal = Nz(Me!売上, 0) + Nz(Me!送料, 0)
結果
売上 Null
送料 100
結果 100
逆引き⑤ DLookup結果を安全に取得したい
実務では非常によくあります。
strName = Nz(DLookup( "顧客名", "T_CUSTOMER", "顧客コード='C001'"), "")
効果
データなし
↓
空文字取得
逆引き⑥ 日付項目を確認したい
日付判定です。
If Nz(Me!実施日, "") = "" Then
MsgBox "未入力です"
End If
Nullと空文字の違い
初心者がよく混同します。
Null
値が存在しない
空文字
“”
値は存在します。
意味が異なります。
IsNullとの違い
比較されることが多い関数です。
IsNull
If IsNull(Me!数量) Then
判定専用です。
Nz
Nz(Me!数量, 0)
変換できます。
使い分け
判定だけ
IsNull
処理続行
Nz
がおすすめです。
実務活用例① CSV取込システム
CSVには空欄が含まれます。
strName = Nz(rs!顧客名, "")
効果
取込エラー防止
実務活用例② 顧客管理システム
電話番号未登録時です。
strTel = Nz(rs!電話番号, "")
未登録でも正常表示できます。
実務活用例③ 売上管理システム
金額集計です。
lngSales = Nz(rs!売上金額, 0)
集計処理
lngTotal = lngTotal + Nz(rs!売上金額, 0)
安定稼働につながります。
実務活用例④ フォーム検索
検索条件です。
If Nz(Me!顧客名, "") <> "" Then
入力有無判定ができます。
実務活用例⑤ ログ出力
ログ保存です。
strLog = Nz(Me!備考, "")
Null対策として有効です。
Nz関数を使わない場合のトラブル
典型例です。
strName = rs!顧客名
顧客名未登録
↓
実行時エラー
対策
strName = Nz(rs!顧客名, "")
ベテラン開発者の定番パターン
レコードセット処理です。
Do Until rs.EOF
strCode = Nz(rs!顧客コード, "")
strName = Nz(rs!顧客名, "")
lngAmount = Nz(rs!金額, 0)
rs.MoveNext
Loop
開発現場でよく見かける記述です。
Copilot活用術① Null対策レビュー
Copilotに依頼します。
以下のAccess VBAコードについて
Nullエラーになる可能性がある箇所を
指摘してください。
Copilot活用術② Nz追加依頼
以下のVBAコードへ
Nz関数を利用した
Null対策を実装してください。
Copilot活用術③ DLookup改善
DLookup利用コードです。
Null対策を含めて
改善してください。
効率よくコード品質を向上できます。 [latest-inf…system.com], [latest-inf…system.com]
Nz関数利用時の注意点
日付項目
日付には空文字ではなく
Null
チェックを使う場合もあります。
数値項目
基本は
0
を指定します。
文字列項目
基本は
“”
です。
開発現場での利用頻度
個人的な利用頻度です。
| 順位 | 用途 |
|---|---|
| 1位 | レコードセット取得 |
| 2位 | DLookup結果処理 |
| 3位 | フォーム入力値 |
| 4位 | CSV取込 |
| 5位 | 集計処理 |
Access VBA開発では毎日のように利用します。
Nz関数を覚えるメリット
次の効果があります。
- エラー削減
- 保守性向上
- コード簡略化
- 運用品質向上
- 障害対応削減
派手な関数ではありませんが、実務効果は非常に大きいです。
まとめ
Nz関数はAccess VBA開発における必須関数の一つです。
特に
- CSV取込
- 顧客管理
- 売上管理
- DLookup
- レコードセット処理
などで大きな効果があります。
またCopilotを活用することで、
- Null対策レビュー
- コード改善
- エラー分析
も効率化できます。
Access VBA初心者の方ほど早い段階でNz関数を習得しておくことをおすすめします。運用開始後のトラブルを大幅に減らせます。


コメント