一括でセル結合したいならこれ
ある一定のグループパターンでセルを結合したいなら、今回紹介するコードを使って簡単に自動でセルを結合するといい。
さっそく、コードとコードの内容を説明していこう。
複数のセルを結合する方法
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)