Excel VBAでセル結合を使って「1月〜6月」などの見出しを作成する際、Rangeを1つずつ指定しているとコードが長くなり、管理もしづらくなります。本記事では、結合処理を効率化し、可読性と拡張性を高める書き方について解説します。
セル結合を個別指定する方法の問題点
一般的に見られるコードでは、Range(“A1:B1”).Mergeのように1つずつセルを結合しています。
この方法はシンプルですが、列数が増えたり月数が増えた場合にコードの修正が多くなり、ミスが発生しやすくなります。
例えば6か月分を12か月に拡張する場合、同じ処理を何度も書き直す必要があります。
ループ処理でセル結合を自動化する方法
VBAではForループを使うことで、繰り返し処理を簡単に実装できます。
例えば2列ずつ結合する場合は、開始列を変数で管理することで効率化できます。
以下のような考え方になります。
・開始列を1(A列)に設定
・2列ずつ結合
・ループで6回繰り返す
改善したVBAコード例
以下のように記述することで、A列からJ列までを自動的に2列ずつ結合できます。
Sub MergeMonths()
Dim i As Long
For i = 1 To 11 Step 2
Range(Cells(1, i), Cells(1, i + 1)).Merge
Next i
End Sub
この方法により、コードの重複を減らし、柔軟な拡張が可能になります。
月名(1月〜6月など)を自動入力する方法
結合したセルに月名を入力する場合も、同様にループ処理を使うと効率的です。
例えば以下のように記述できます。
For i = 1 To 6
Cells(1, (i – 1) * 2 + 1).Value = i & “月”
Next i
これにより、結合セルの左端に自動で月名を設定できます。
より実務向けの設計ポイント
実務で使う場合は、結合セルの多用には注意が必要です。
結合セルはソートやフィルタ処理と相性が悪いため、可能であれば「中央揃え(選択範囲内)」など代替手段も検討すると良いです。
・結合は最小限にする
・表示目的なら書式で代替する
・データ処理と見た目を分離する
まとめ
Excel VBAでセル結合を繰り返し行う場合は、個別指定よりもループ処理を使うことでコードの可読性と保守性が大きく向上します。
また月名の自動入力も組み合わせることで、より実務的で効率的なシート作成が可能になります。


コメント