セルを結合する
Excel VBAでセルを結合するには、いくつかの方法があります。
RangeオブジェクトのMergeCellsプロパティを使用する
最も基本的な方法は、RangeオブジェクトのMergeCellsプロパティを使用する方法です。
このプロパティをTrueに設定すると、選択範囲のセルが結合されます。
VBA
Sub セルを結合する()
' 結合したいセル範囲を選択する
Range("A1:C3").Select
' 選択範囲のセルを結合する
ActiveSelection.MergeCells = True
End Sub
コードは注意してご使用ください。
上記のコードは、セルA1からC3までの範囲を結合します。
RangeオブジェクトのMergeメソッドを使用する
Mergeメソッドを使用すると、より詳細な制御が可能です。
このメソッドには、Across引数とStartCell引数という2つの引数があります。
Across引数:Trueに設定すると、横方向にセルを結合します。
Falseに設定すると、縦方向にセルを結合します。
StartCell引数:結合するセルの範囲の開始セルを指定します。
VBA
Sub セルを結合する()
' 横方向にセルを結合する
Range("A1:C3").Merge (Across:=True)
' セルA2からC5までの範囲を、セルA2を先頭セルとして結合する
Range("A2:C5").Merge (StartCell:=Range("A2"))
End Sub
コードは注意してご使用ください。
上記のコードは、セルA1からC3までの範囲を横方向に結合し、セルA2からC5までの範囲をセルA2を先頭セルとして結合します。
同じ値のセルを自動的に結合するマクロを作成する
同じ値が連続しているセルを自動的に結合したい場合は、マクロを作成することができます。
以下のマクロは、A列の同じ値が連続しているセルを自動的に結合します。
VBA
Sub 同じ値のセルを結合する()
Dim rng As Range
Dim lastRow As Long
' A列の最後の行を取得する
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' A列をループする
For Each rng In Range("A1:A" & lastRow)
' セルの値を取得する
Dim value As String
value = rng.Value
' 次のセルまで同じ値であれば、セルを結合する
Dim nextRow As Long
nextRow = rng.Row + 1
While Cells(nextRow, 1).Value = value And nextRow <= lastRow
nextRow = nextRow + 1
Wend
If nextRow > rng.Row Then
rng.MergeCells = True
End If
Next rng
End Sub
コードは注意してご使用ください。
注意事項
セルを結合すると、結合されたセルの書式設定はすべて1番左上のセルの書式設定になります。
結合されたセルを編集するには、一番左上のセルを編集する必要があります。
セルを結合解除するには、RangeオブジェクトのUnMergeCellsメソッドを使用します。
参考情報
【VBA入門】セルの結合と解除(Merge、UnMerge、MergeCells) | 侍エンジニアブログ: https://www.sejuku.net/blog/32626
Excel でデータの列を連結する VBA マクロ - Microsoft Support: https://support.microsoft.com/ja-jp/topic/vba-macro-to-concatenate-columns-of-data-in-excel-64d2e751-8ef6-e83d-ba62-d98698f8bf56
【Excel VBA】縦方向に連続する同じ値のセルを自動結合 - shikumika's diary: https://shikumika.org/entry/vba-cellmerging