和風スパゲティのレシピ

日本語でコーディングするExcelVBA

セルの結合・解除をショートカットに登録する

功罪はあれど正しく使えば大変便利なセル結合ですが、
この機能にはショートカットキーが設定されていません。


この機能は使うときは連続で使うことが多い機能ですし、
帳票のレイアウトを調整をすると設定解除のトグルが欲しくなります。

標準機能にはありませんので、
マクロでセル結合を再現してショートカットに登録してしまいましょう。


ちょうど「Merge」のMが欠番ですので、「Ctrl+M」にセットするのがおすすめです。

マクロの仕様

本家マクロのUIをほぼ再現しており、

  • 選択範囲にひとつでも結合セルがあれば解除
  • 選択範囲が非結合セルだけなら結合

というトグル構成になっています。


また本家同様、複数エリアを選択して結合することも可能です。


加えてひとつだけカスタマイズを行っており、
↓この選択状態で実行すると、
セル結合実行範囲

↓こう結合してくれる仕様にしました。
横方向の結合機能

いわゆる「横方向に結合」を自動で選択してくれる機能ですね。
 

  • 複数の列を選択している
  • かつ、複数の行(全行である必要はない)に値がある

以上を満たす範囲での実行時は「横方向に結合」が実行される仕様です。


最後に、これは便利マクロ全般に言えることですが、
このマクロで実行したセル結合は「元に戻す」が使えません。

そのことに十分注意してご活用ください。

ソースコード

' セル結合のショートカット
Sub セル結合を設定解除する()

    Dim 選択範囲 As Range: Set 選択範囲 = Selection
    If 選択範囲.CountLarge = 1 Then Exit Sub

    ' 選択エリアが結合セルを含む場合は解除
    If 選択範囲.MergeCells = True Or IsNull(選択範囲.MergeCells) Then
        選択範囲.UnMerge
    
    ' 選択エリアが複数の列からなる単独のエリアで、
    ' 第1行の値が1個でエリアには複数の値がある」場合は行ごとに結合
    ElseIf 選択範囲.Areas.Count = 1 _
    And 選択範囲.Columns.Count >= 2 _
    And WorksheetFunction.CountIf(選択範囲.Rows(1), "<>") = 1 _
    And WorksheetFunction.CountIf(選択範囲, "<>") >= 2 Then
        選択範囲.Merge True
    
    ' その他の場合は通常の結合
    Else
        選択範囲.Merge
    End If

End Sub

解説

特に解説は不要かと思います。

セル結合を行うMergeメソッドの詳しい解説はこちらをどうぞ。
www.limecode.jp