見出し画像

セルを結合する

 Excel VBAでセルを結合するには、いくつかの方法があります。

  1. RangeオブジェクトのMergeCellsプロパティを使用する

 最も基本的な方法は、RangeオブジェクトのMergeCellsプロパティを使用する方法です。
 このプロパティをTrueに設定すると、選択範囲のセルが結合されます。

VBA
Sub セルを結合する()

' 結合したいセル範囲を選択する
Range("A1:C3").Select

' 選択範囲のセルを結合する
ActiveSelection.MergeCells = True

End Sub
コードは注意してご使用ください。

 上記のコードは、セルA1からC3までの範囲を結合します。

  1. 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を先頭セルとして結合します。

  1. 同じ値のセルを自動的に結合するマクロを作成する

 同じ値が連続しているセルを自動的に結合したい場合は、マクロを作成することができます。
 以下のマクロは、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

この記事が気に入ったらサポートをしてみませんか?