■ はじめに
仕事でAccessを触る機会が多いのですが、
一番やっかいなのが「NULL(空白)」です。
見た目ではただの空欄に見えても、
クエリを組むと正しい結果が出なかったり、集計できなかったり…。
最初の頃は、クエリ内で Nz関数 を何十回も書いて対応していました。
でもフィールドが増えるたび、式を書き直すたび、こう思いました。
「もうやってらんね~~~!!」(笑)
■ NULL(空白)があるとどう困るの?
AccessのテーブルにNULLがあると、こんな問題が起きます👇
特にぼくの場合、
20万行 × 最大列数 のデータも扱うので、
Nz関数だけでは現実的じゃなくなりました。
■ 解決方法:NULLを“後で回避する”より“先に全部整える”
そこで考えたのが、このシンプルな発想です。
「最初にテーブル全体のNULLを0や文字に置き換えてしまえばいい」
この方法なら、
その後のクエリ作成・集計・Excel出力などが一気に楽になります。
さらに、今回紹介する方法は
**“フィールド名に依存しない(列が変わっても動く)”**のが大きな強みです。
■ VBAの準備①:VBE(VBAの画面)を開く方法
「VBAなんて触ったことない」という人でも大丈夫です。
以下の手順で“魔法の窓”を開きます👇
-
Accessを開く
-
キーボードで Alt + F11 を押す
-
「Visual Basic Editor(VBE)」画面が開きます
-
上メニューの 挿入 → 標準モジュール を押します
-
白い画面が出たら、そこにコードを貼る準備OKです
※ここに画像を載せる予定(VBE画面のスクショ)📷
■ VBAの準備②:参照設定(重要!DAOが使えるようにする)
今回のコードでは DAO.Database という機能を使うので、参照設定が必要です。
手順:
-
VBEの画面で上メニューから
ツール → 参照設定 を開く
-
一覧の中から
✅ Microsoft Office XX.0 Access database engine Object Library
にチェックを入れる
-
OKを押して閉じる
※XX.0はOfficeのバージョン(例:16.0、15.0など)
■ 実際に使っているコード(コピーして使えます)
■ このコードのポイントは3つだけ!
| ✔ ポイント |
説明 |
| ① テーブル名を指定するだけで使える |
ReplaceNullsInTable "テーブル名" でOK |
| ② フィールド名に依存しない |
列が追加されても動く=メンテナンス不要 |
| ③ SQLで一括処理するから高速&安定 |
20万行でも9分ほどで完了しました |
■ 実行方法
-
コードを貼り付けたモジュールを開く
-
Sub 空白削除() にカーソルを合わせて F5キー を押す
-
「空白・NULLの置換が完了しました!」と表示されたら成功です🎉
■ おわりに
NULLを毎回Nz関数で処理するのは、本当に大変です。
でも、最初に整えてしまえば、あとの作業はぐっと楽になる。
Accessは工夫次第でまだまだ戦えるツールです。
この記事が、同じように悩んでいる誰かの時間を少しでも軽くできたら嬉しいです。
※コードを1行ずつ解説した「詳細版」や、応用編(特定フィールドだけ処理する方法)も、後日別記事でまとめる予定です。