VBAで一定のグループごとに複数セルを結合する方法【一瞬で結合】
一括でセル結合したいならこれ

ある一定のグループパターンでセルを結合したいなら、今回紹介するコードを使って簡単に自動でセルを結合するといい。

さっそく、コードとコードの内容を説明していこう。

複数のセルを結合する方法


Sub cellsMerge(ByVal target_sheet As Worksheet, ByVal base_column As Long, _
    ByVal start_row As Long, ByVal target_column As Long, ByVal is_sum As Boolean)

    Dim merge_target As Range
    Dim last_low As Long
    
    Set merge_target = target_sheet.Cells(start_row, target_column)
    last_low = target_sheet.Cells(Rows.Count, 1).End(xlUp).Row
    
    Dim i As Long
    
    For i = start_row To last_low
        
        If target_sheet.Cells(i, base_column) = target_sheet.Cells(i, base_column).Offset(1, 0) Then
            Set merge_target = Union(merge_target, target_sheet.Cells(i, target_column).Offset(1, 0))
        Else
            Application.DisplayAlerts = False
            
            If is_sum = True Then merge_target = WorksheetFunction.Sum(merge_target)
            
            merge_target.Merge
            Set merge_target = merge_target.Offset(1, 0)
        End If
        
    Next i

End Sub

上記がコードのすべてだ。説明はいらないなら上記コードをコピペして使ってくれ。

つぎからコードの詳細を説明していこう。

結合する列を設定する

Dim merge_target As Range
Dim last_low As Long
    
Set merge_target = target_sheet.Cells(start_row, target_column)
last_low = target_sheet.Cells(Rows.Count, 1).End(xlUp).Row

まず最初に、結合したい列をここで設定する。

  • 4行目...結合したい列を設定し、何行目から結合対象か決める
  • 5行目...最終行までを検索し設定。1の部分をtarget_columnにしてもよい

1つ下のセルと同じなら複数セルを選択する

If target_sheet.Cells(i, base_column) = target_sheet.Cells(i, base_column).Offset(1, 0) Then
    Set merge_target = Union(merge_target, target_sheet.Cells(i, target_column).Offset(1, 0))

ここで1つ下のセルが同じ値か、文字列ならどんどん追加選択していく。

ようは、もし結合グループ化したいセルがその1つ下のセルと同じならセルを選択するということ。

  • 1行目...結合するベースのセルが、1つ下のセルと同じだった場合のIf文
  • 2行目...実際に結合するセルと同じ行を複数選択していく

1つ下のセルと違うならセルの結合をする

     
Else
    Application.DisplayAlerts = False
            
    If is_sum = True Then merge_target = WorksheetFunction.Sum(merge_target)
            
    merge_target.Merge
    Set merge_target = merge_target.Offset(1, 0)
End If

ここで1つ下のセルが違う値か、文字列ならセルを結合する。

  • 2行目...セルを結合するときメッセージがでてくるのでDisplayAlertsをFalseに
  • 4行目...もしセルを結合するときに数値を合計したいならis_sumをTrueに
  • 6行目...選択済みのセルを結合する
  • 7行目...セルの選択を結合後セルの1つ下のみ選択にする

cellsMergeの使いかた

Call cellsMerge(target_sheet, base_column, start_row, target_column, is_sum)
  • target_sheet...結合したいシート
  • base_column...結合のベースになる列
  • start_row...結合開始行
  • target_column...結合したい列
  • is_sum...結合列を足し算するかどうか

実際に結合される列はtarget_columnで設定した数値の列だ。base_columnで設定した数値の列グループを元にセルを結合していく。

つぎの例は、Sheet1シートの2列目を、1列目ベースにグループ化しセルを結合する。適用行は2行目から。

Call cellsMerge(Sheet1, 1, 2, 2, False)