VBAでセルが結合されているか判定する方法と、結合されている範囲の取得についてご説明します。
セルが結合されているとデータを正常に取得出来ないなど、処理するうえで一工夫必要な場合があります。
セルが結合されている可能性が高いシートを処理する際には、判定することで意図しない結果になることを回避する事が出来ます。
セルの結合や、その他の操作については下記記事をご覧ください。
1.セルが結合されているか判定する
結合されているか判定する方法
セルが結合されているか判定するには、Rangeオブジェクトの「MergeCellsプロパティ」を使用します。
次のように記述します。
Range.MergeCells
MergeCellsプロパティは指定したセルが結合に含まれている場合はTrueを返します。
注意点があり、指定したセルが単一ではなく範囲の場合は、指定したセル範囲すべて結合セルに含まれないと、Trueを返しません。
範囲を指定する場合はご注意ください。
サンプルコード
次のようにB2~B13の範囲のうち結合されているデータを取得します。
Sub Sample1()
Dim i As Long
Dim mystr As String
For i = 2 To 13
If Cells(i, 2).MergeCells Then
mystr = mystr & i & "行目は結合されています。" & vbCrLf
End If
Next i
MsgBox mystr
End Sub
「For i = 2 To 13」でループする範囲を指定します。
「If Cells(i, 2).MergeCells Then」で指定したセルが結合されているか判定します。
処理として行数を表示させています。
2.結合されている範囲を取得する
結合されている範囲を取得する方法
結合されている範囲を取得する方法はRangeオブジェクトの「MergeAreaプロパティ」を使用します。
次のように記述します。
Range.MergeArea
「MergeArea」はそれぞれ次のように記述するとデータが取得できます。
Range.MergeArea.Address 'セル範囲
Range.MergeArea .Item(1).Address '左上のセル
Range.MergeArea .Item(.Count).Address '右下のセル
Range.MergeArea.Count 'セルの数
Range.MergeArea.Rows.Count '行数
Range.MergeArea.Columns.Count '列数
サンプルコード
それでは次のようなデータを使ってB5~6の結合されているデータの範囲やセルの数などを取得してみたいと思います。
Sub Sample2()
With Cells(5, 2).MergeArea
Debug.Print .Address 'セル範囲
Debug.Print .Item(1).Address '左上のセル
Debug.Print .Item(.Count).Address '右下のセル
Debug.Print .Count 'セルの数
Debug.Print .Rows.Count '行数
Debug.Print .Columns.Count '列数
End With
End Sub
上からセル範囲「$B$5:$B$6」、1番左上のセル「$B$5」、1番右下のセル「$B$6」、セルの数「2」、行数「2」、列数「1」と取得出来ました。