📊 Excel VBA Top100
🔄

FillBlankCells

データ処理

選択範囲の空白セルを上のセルの値で埋めます

選択範囲内の空白セルを検出し、直前の値(上のセルの値)で自動的に埋めるマクロです。グループ化されたデータで先頭行にしか値が入っていない「結合風」の入力形式を、フィルターやソートに使えるフラットなデータ形式に変換する際に非常に有効です。ピボットテーブルのデータソースとして使うためのデータ整形や、データベースへのインポート前処理として活用できます。手動でのコピー&ペースト作業を一掃します。処理は上から下へ走査し、空白を見つけるたびに直前の値を複製していくシンプルな仕組みです。Excel標準の「ジャンプ→空白セル→数式入力」というテクニックと同じ結果を、手順を覚えることなくワンクリックで得られます。ピボットテーブルや重複削除・並び替えは「全行に値が入っている」ことが前提のため、このマクロはそれらの前処理として組み合わせる場面が多くなります。

FillBlankCells デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 対象範囲を選択してから FillBlankCells を実行します

🎯 活用シーン

  • ✓小計行付きの集計表で、グループ名が先頭行にしかない形式のデータを行単位で参照できるフラット形式に変換したいとき
  • ✓ピボットテーブルのデータソースとして使うために、空白セルだらけのデータを整形したいとき
  • ✓Excelからデータベースにインポートする前の前処理として、空白を前行の値で補完してデータを正規化したいとき
  • ✓会計システムから出力された伝票データで、伝票番号が先頭行にしか入っていない形式を全行に展開したいとき
  • ✓Excelの表をデータベースやBIツールに取り込む前に、省略された繰り返し項目をすべて埋めたいとき

💡 実装のヒント

  • ▸処理対象にしたい列だけを選択してから実行してください。複数列を選択した場合は各列独立して空白埋めが行われます。
  • ▸先頭行が空白の場合は埋める値が存在しないため、先頭行には必ず値が入っていることを確認してから実行してください。
  • ▸空白埋め後に元の状態に戻したい場合に備えて、実行前にシートをコピーしておくことをお勧めします。
  • ▸値のコピーで埋めるため、後から並び替えても表示が崩れません。数式方式(=上のセル)と違い安全です。
  • ▸埋めたあとにSortDataやRemoveDuplicatesを実行する、という順番で使うとデータベース形式への変換が完了します。

💻 VBAコード

' FillBlankCells
' -----------------
' Macro Name: FillBlankCells
' Description: 選択範囲の空白セルを上のセルの値で埋めます
' Parameters: なし
' Returns: なし
' Usage: 対象範囲を選択してから FillBlankCells を実行します
' -----------------

Sub FillBlankCells()
    On Error GoTo ErrorHandler

    Dim rng As Range
    Dim cell As Range

    If TypeName(Selection) <> "Range" Then
        MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set rng = Selection

    For Each cell In rng
        If IsEmpty(cell) And cell.Row > rng.Row Then
            cell.Value = cell.Offset(-1, 0).Value
        End If
    Next cell

    MsgBox "空白セルを埋めました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub