突然ですが、「セル結合」って、滅びればいいのにと思いませんか?
見た目は綺麗かもしれません。でも、並び替えはできないし、コピペはずれるし、フィルターも効かない。
「これを作った人は、後の作業のことを考えてないの!?」と、モニターの前で発狂しかけた経験、私も500回くらいあります。
でも、しょうがないですよね。文句を言ってるだけではファイルは直りません。
今回は、「セル結合を解除して、空白になった部分に上のデータを自動で埋める」コードを紹介します。
これを使えば、手作業でカチカチ解除してコピペしていた10~30分の作業が、わずか0.5秒で終わります。
「ただ解除する」だけじゃダメなの?
Excelの「結合解除」ボタンを押すと、左上のデータだけが残り、他のセルは「空っぽ」になりますよね。
空っぽのままだと、結局データとして使い物になりません。
私たちがやりたいのはこれです。
- 結合をバラバラにする。
- 空っぽになったセルに、正しい値(上のセルの値)を入れる。
これを手動でやると面倒ですし、どこかでミスが起きますが、VBA(マクロ)なら一瞬です。
コピペで使える!「結合解除&穴埋め」マクロ
以下の「結合解除&穴埋め」コードを標準モジュールにコピペしてください。
Sub 結合解除と穴埋め()
' 選択した範囲の結合を解除して、空白を上の値で埋めるマクロ
Dim rng As Range
' エラー回避:範囲が選択されていない場合は終了
If TypeName(Selection) <> "Range" Then Exit Sub
Application.ScreenUpdating = False ' 画面のチラツキ防止
Set rng = Selection
' 1. 結合を解除する
rng.UnMerge
' 2. 空白セル(元結合されていた部分)に数式を入れる
On Error Resume Next ' 空白がない場合のエラー無視
rng.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
' 3. 数式を「値」に変換して固定する
rng.Value = rng.Value
On Error GoTo 0
Application.ScreenUpdating = True
MsgBox "結合を解除してデータを整えました!", vbInformation
End Sub
使い方は簡単!
①結合を解除したい範囲をマウスでぐわっと選択する。
②このマクロを実行する。
これだけで面倒な作業時間は確実に減ります!
補足:【R1C1形式とは】相対指定のルール
※興味がない方はスキップして大丈夫です。
R1C1形式は、行(Row)と列(Column)をどちらも数字で指定する方法です。
普段使っているA1形式では、列をアルファベット(A, B, C…)で数えますが、R1C1形式では「何行目の、何列目」というように、すべて数値で位置を特定します。
今回のコードで使われている [ ](スクエアブラケット)は、現在のセルから見た相対的な位置(ズレ)を表します。
- R[1]C:1行下、同じ列
- R[-1]C:1行上、同じ列
- RC[1]:同じ行、1列右
- RC[-1]:同じ行、1列左
カッコの中にマイナスを入れると「上」や「左」へ戻り、プラスを入れると「下」や「右」へ進みます。
数字が入っていない(RCの直後に数字がない)場合は、現在と同じ位置を指します。
逆に「結合」したい時は?
データ処理の観点からは推奨しませんが、上司への提出資料やクライアントからの要望でどうしても結合が必要な場合もありますよね。
シンプルに「選択範囲を結合する(警告なし)」コードも置いておきます。
Sub 警告なしで結合()
' 選択範囲を強制的に結合する(データは左上のみ残る)
Application.DisplayAlerts = False
Selection.Merge
Application.DisplayAlerts = True
End Sub
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。


コメント