今日も少しだけ、整える。

体も心も、少しずつ整える。 忙しいパパのリアルな日常と、続けられる工夫を綴ります。

🎂 ささやかな誕生日会と、いちばんのプレゼント

先日、ささやかな誕生日会を開きました。

ケーキを買って、家族で食卓を囲んで、

いつもより少し特別な夜——そう思っていました。

 

でも、ひとつだけ想像していなかった出来事がありました。

娘が初めて、「ハッピーバースデー」を歌ってくれたんです。

 

小さな声で、一生懸命に、最後まで歌いきってくれました。

その歌声を聞いた瞬間、胸がじんわりあたたかくなって、

どんな高価なプレゼントよりもうれしかった。

 

成長って、ほんとにあっという間ですね。

ついこの前まで腕の中にいたのに、

もうこうして、自分の声で祝ってくれる。

 

何にも勝るプレゼントをもらった夜でした。

【Access】もうNULLに悩まない!テーブル全体の空白を一括で0と文字に置き換える方法(VBA付き)

■ はじめに

仕事でAccessを触る機会が多いのですが、
一番やっかいなのが「NULL(空白)」です。

見た目ではただの空欄に見えても、
クエリを組むと正しい結果が出なかったり、集計できなかったり…。

最初の頃は、クエリ内で Nz関数 を何十回も書いて対応していました。
でもフィールドが増えるたび、式を書き直すたび、こう思いました。

「もうやってらんね~~~!!」(笑)


■ NULL(空白)があるとどう困るの?

AccessのテーブルにNULLがあると、こんな問題が起きます👇

  • SumやAvgなどの集計で正しく計算されない

  • IIf関数で条件分岐すると、NULLがあるだけで結果が戻らない

  • Excelに出力すると、空欄扱いされて位置がズレる

  • グラフやピボット集計で欠損値になってしまう

  • NULLがどこにあるか探すだけで時間が消える…

特にぼくの場合、
20万行 × 最大列数 のデータも扱うので、
Nz関数だけでは現実的じゃなくなりました。


■ 解決方法:NULLを“後で回避する”より“先に全部整える”

そこで考えたのが、このシンプルな発想です。

「最初にテーブル全体のNULLを0や文字に置き換えてしまえばいい」

この方法なら、
その後のクエリ作成・集計・Excel出力などが一気に楽になります。

さらに、今回紹介する方法は
**“フィールド名に依存しない(列が変わっても動く)”**のが大きな強みです。


VBAの準備①:VBE(VBAの画面)を開く方法

VBAなんて触ったことない」という人でも大丈夫です。
以下の手順で“魔法の窓”を開きます👇

  1. Accessを開く

  2. キーボードで Alt + F11 を押す

  3. Visual Basic Editor(VBE)」画面が開きます

  4. 上メニューの 挿入 → 標準モジュール を押します

  5. 白い画面が出たら、そこにコードを貼る準備OKです

※ここに画像を載せる予定(VBE画面のスクショ)📷


VBAの準備②:参照設定(重要!DAOが使えるようにする)

今回のコードでは DAO.Database という機能を使うので、参照設定が必要です。

手順

  1. VBEの画面で上メニューから
    ツール → 参照設定 を開く

  2. 一覧の中から
    Microsoft Office XX.0 Access database engine Object Library
    にチェックを入れる

  3. OKを押して閉じる

※XX.0はOfficeのバージョン(例:16.0、15.0など)


■ 実際に使っているコード(コピーして使えます)

 

Sub ReplaceNullsInTable(tblName As String)

    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
    Dim sql As String

    Set db = CurrentDb
    Set tdf = db.TableDefs(tblName)

    For Each fld In tdf.Fields
        Select Case fld.Type
            Case dbText ' 文字列
                sql = "UPDATE [" & tblName & "] " & _
                      "SET [" & fld.Name & "]='*BLANK' " & _
                      "WHERE [" & fld.Name & "] IS NULL OR [" & fld.Name & "]='';"
            Case dbMemo ' 長文(メモ型)
                sql = "UPDATE [" & tblName & "] " & _
                      "SET [" & fld.Name & "]='*BLANK' " & _
                      "WHERE [" & fld.Name & "] IS NULL OR [" & fld.Name & "]='';"
            Case dbLong, dbInteger, dbSingle, dbDouble, dbCurrency ' 数値型
                sql = "UPDATE [" & tblName & "] " & _
                      "SET [" & fld.Name & "]=0 " & _
                      "WHERE [" & fld.Name & "] IS NULL;"
            Case Else
                sql = "" ' 他の型はスキップ
        End Select

        If sql <> "" Then
            db.Execute sql, dbFailOnError
        End If
    Next fld

    MsgBox "空白・NULLの置換が完了しました!", vbInformation

End Sub

Sub 空白削除()
    Call ReplaceNullsInTable("任意のテーブル名")
End Sub


■ このコードのポイントは3つだけ!

✔ ポイント 説明
① テーブル名を指定するだけで使える ReplaceNullsInTable "テーブル名" でOK
② フィールド名に依存しない 列が追加されても動く=メンテナンス不要
SQLで一括処理するから高速&安定 20万行でも9分ほどで完了しました

■ 実行方法

  1. コードを貼り付けたモジュールを開く

  2. Sub 空白削除() にカーソルを合わせて F5キー を押す

  3. 「空白・NULLの置換が完了しました!」と表示されたら成功です🎉


■ おわりに

NULLを毎回Nz関数で処理するのは、本当に大変です。
でも、最初に整えてしまえば、あとの作業はぐっと楽になる。

Accessは工夫次第でまだまだ戦えるツールです。
この記事が、同じように悩んでいる誰かの時間を少しでも軽くできたら嬉しいです。


※コードを1行ずつ解説した「詳細版」や、応用編(特定フィールドだけ処理する方法)も、後日別記事でまとめる予定です。

はじめまして、「今日も少しだけ、整える。」を始めます。

こんにちは、ゆうです。

このブログを見に来てくださってありがとうございます。

仕事や家族のことに追われながらも、
少しずつ体と心を整えていきたい——
そんな思いから、このブログを始めました。

無理をせず、でも諦めず。
筋トレやざっくり飯、仕事の効率化など、
「続けられる小さな工夫」を日々記録していきます。

完璧じゃなくてもいい。
昨日よりちょっとだけ前に進めたら、それで充分。

同じように頑張るパパや働く人の、
気持ちが少し楽になるきっかけになれたらうれしいです。

これから、どうぞよろしくお願いします。