Excel VBAでセルの結合・解除・中央寄せを自動化!Mergeの使い方を完全解説
生徒
「エクセルで見出しを作るとき、複数のセルを一つにくっつけたり、文字を真ん中に寄せたりしますよね。あれをVBAで自動でやる方法はありますか?」
先生
「もちろんありますよ!VBAの Merge という命令を使えば、セルの結合が一瞬で終わります。解除や中央寄せもセットで覚えれば、資料作りがすごく楽になりますよ。」
生徒
「手作業だと面倒な結合も自動化できるんですね。初心者でも簡単に書けますか?」
先生
「大丈夫です。セルの範囲を選んで、『くっつけて!』と命令を出すだけですから。基本の書き方から一緒にマスターしていきましょう!」
1. セルの結合とは?VBAで操作するメリット
Excel(エクセル)の「セルの結合」とは、隣り合った複数のマス目(セル)を合体させて、一つの大きなセルとして扱う機能のことです。主に表のタイトルや、共通する項目をまとめるときに使われます。VBA(ブイビーエー)というプログラミング言語を使ってこの操作を自動化すると、決まった形の報告書を大量に作成する際、マウスを何度も動かす手間が完全になくなります。
パソコンを触り始めたばかりの方にとって、細かいマウス操作は肩が凝る原因になりますよね。VBAなら、「A1からC1までを結合する」という命令を一度書いておけば、次からはボタン一つでパソコンが正確に作業を終わらせてくれます。これが 業務効率化 の第一歩です。
2. Mergeメソッドでセルを結合する基本
セルを結合するために使う命令は Merge(マージ) と言います。英語で「合併する」や「一つにまとめる」という意味があります。使い方は、対象となるセルの範囲(Range)を指定して、その後にドット(.)を付けて Merge と書くだけです。
例えば、A1セルからC1セルまでを一つにしたいときは、Range("A1:C1").Merge と記述します。このとき、結合されるセルの中に文字が入っている場合は、一番左上にあるセルの文字だけが残り、他のセルの文字は消えてしまうというエクセルのルールがあります。VBAでもこの動きは同じですので、大切なデータが消えないように注意しながら使いましょう。
Sub SimpleMerge()
' A1セルからE1セルまでを一つの大きなセルに合体させます
Range("A1:E1").Merge
End Sub
3. UnMergeメソッドで結合を解除する方法
一度くっつけたセルを、元のバラバラの状態に戻したいときは UnMerge(アンマージ) という命令を使います。先ほどの Merge の頭に「打ち消し」を意味する Un が付いた言葉です。
結合を解除したいセル、あるいは結合されている範囲を含むセルを指定して UnMerge を実行します。解除された後は、文字は元の場所(一番左上のセル)に残ります。間違えて結合してしまった場合や、データの加工がしやすいように一時的に解除したいときに非常に役立ちます。プログラミングでは、このように「やったことを元に戻す」方法もセットで覚えるのが上達のコツです。
Sub SimpleUnMerge()
' A1セルが含まれる結合範囲をバラバラの状態に戻します
Range("A1").UnMerge
End Sub
4. 文字を真ん中に!中央寄せ(配置)の設定
セルを結合した後は、中の文字を中央に配置したくなりますよね。これを行うには HorizontalAlignment(ホリゾンタル・アライメント) というプロパティを使います。「水平方向(横方向)の整列」という意味の長い単語ですが、覚え方は「横の並び」で大丈夫です。
文字を中央に寄せるには、このプロパティに xlCenter(エクセル・センター)という値を設定します。これを結合の命令と組み合わせることで、一瞬で見栄えの良い見出しが出来上がります。パソコン初心者の方には呪文のように見えるかもしれませんが、一つひとつの言葉に「横方向の整列を真ん中(センター)にする」という明確な意味があるのです。
Sub MergeAndCenter()
' B2からD2を結合して、文字を横方向の真ん中に配置します
With Range("B2:D2")
.Merge
.HorizontalAlignment = xlCenter
End With
End Sub
5. 縦方向の中央寄せもマスターしよう
横方向だけでなく、セルの高さ(縦方向)の真んなかに文字を置きたいこともあります。これには VerticalAlignment(バーティカル・アライメント) を使います。「垂直方向(縦方向)の整列」という意味です。
設定する値は、横のときと同じ xlCenter を使います。例えば、大きな結合セルのちょうど真ん中にタイトルをドーンと置きたいときは、横(Horizontal)と縦(Vertical)の両方をセンターに設定します。これで、どんなにセルの高さが変わっても、常に文字が真ん中に位置する美しいシートが自動で作れます。見た目にこだわる資料作りには欠かせないテクニックです。
6. DisplayAlertsで警告メッセージを非表示にする
手作業でセルを結合しようとしたとき、「セルを結合すると、左上の値のみが保持され、他の値は破棄されます」という警告画面が出たことはありませんか?VBAでプログラムを動かしている途中にこの画面が出て止まってしまうと、せっかくの自動化が台無しです。
これを防ぐために、DisplayAlerts(ディスプレイ・アラート) という設定を一時的に False(偽=オフにする)にします。こうすることで、エクセルからの確認メッセージを無視して、どんどん結合処理を進めることができます。処理が終わった後は、忘れずに True(真=オンにする)に戻してあげるのが、パソコンに優しいプログラミングの作法です。
Sub SmartMerge()
' エクセルの警告画面が出ないように一時的にオフにします
Application.DisplayAlerts = False
' 値が入っている複数のセルを結合します(警告が出ずに実行されます)
Range("A5:B6").Merge
' 警告の設定を元に戻します
Application.DisplayAlerts = True
End Sub
7. 指定した範囲が結合されているか確認する方法
プログラムの中で、「もしこのセルが結合されていたら、解除する」というふうに、今の状態をチェックしたいときがあります。これには MergeCells(マージ・セルズ) プロパティを使います。これは、「結合されているかな?」という問いかけに対して、YesかNo(TrueかFalse)で答えてくれる機能です。
例えば、If Range("A1").MergeCells = True Then と書けば、「もしA1が結合されていたら」という条件を作ることができます。これを使うことで、エラーの出にくい、より高度な自動化プログラムが作れるようになります。条件によって動きを変えるのは、プログラミングの醍醐味(だいごみ)ですね。
8. 結合セルを扱う際の注意点とコツ
セルの結合は見た目には綺麗ですが、実はVBAでデータを並び替えたり、集計したりするときには「邪魔」になってしまうことがあります。結合されたセルがあると、パソコンが「どこがデータの区切りか」を判断できなくなる場合があるからです。
そのため、実務でのコツは「計算に使う表の中身」は結合せず、「一番上のタイトル部分」や「印刷用のシート」だけを結合することです。データの保存用シートと、見た目重視の出力用シートを分けるという考え方を持つと、エクセルVBAのスキルはぐんと向上します。見た目と使い勝手のバランスを取るのが、プロの技と言えるでしょう。
9. 繰り返し処理と組み合わせて一括結合
最後に、一歩進んだ応用を紹介します。VBAの「繰り返し(ループ)」という機能を使えば、1行目、2行目、3行目……と順番に同じ範囲を結合していくことができます。例えば、毎日何百行も続くデータの、特定の項目を一つずつ結合していくのは地獄のような作業ですが、VBAなら一秒で完了します。
「この列の同じ名前が並んでいるところだけを結合して」という指示をパソコンに出せるようになると、もう手放せません。まずは今回学んだ Merge、UnMerge、そして Center の三つの魔法を覚えて、自分のエクセルシートを自由自在に操る楽しさを味わってみてください。最初は失敗しても大丈夫。一つひとつの命令を確認しながら、ゆっくり進んでいきましょう!