Excel VBA 統合されたセルのデータを取得する方法

セルの操作

VBAで統合されたセルに入力されているデータを取得する方法についてご説明します。

統合されたセルのデータを取得した場合、一番左上のセル以外を指定してデータを取得しようとした場合は空白が返ってきます。

そのため、統合されたセルのどこを指定しても入力されているデータを取得する方法です。

その他のセルの操作については下記記事をご覧ください。

1.結合セルのデータをそのまま取得した場合

結合されたセルをVBAでそのまま取得しようとすると、一番左上のセル以外は空白になってしまします。

そのままデータを取得しようとすると、どのようにデータが取得できるか、次のような「年」が結合されて、「月」が右に入力されたデータを取得してみます。

Sub Sample1()

Dim i As Long
Dim d As String

For i = 2 To 25

    d = d & Cells(i, 2) & Cells(i, 3) & vbCrLf

Next i

MsgBox d

End Sub

2行目から25行目までループします。

各行のB列とC列を結合して変数に入れて最後にメッセージボックスに表示してみます。

1月は年と月が正常に取れましたが、それ以外の月は月のみが取得されました。

これを各月すべて年を取得する方法です。

2.結合セルのデータを取得する方法

上記の様に普通に取得しようとすると、左上のセル以外データを取得できません。

そのため、結合されたセルのデータを取得するには「MergeAreaメソッド」を使用します。

MergeAreaメソッド」は指定したセルの結合されている範囲を返します。

返された値はコレクションとなり、Itemでコレクションの中の値を取得する事が可能です。

次の様に記述します。

Range.MergeArea(1).Value

'もしくは
Range.MergeArea.Item(1).Value

上記の方法でも取得出来ますが次のよう列を指定して記述する事もできます。

Range.MergeArea(1, 1).Value

'もしくは
Range.MergeArea.Item(1, 1).Value

注意点としては指定するRangeに複数のセルを指定するとエラーになります。

それでは上記のデータを使い、各年と月を結合してみたいと思います。

3.結合セルのデータを取得するサンプルコード

先ほどの上記のデータを2~25行までループして、各年と各月を結合して表示します。

Sub Sample2()

Dim mArea As Variant
Dim i As Long
Dim d As String

For i = 2 To 25

    mArea = Cells(i, 2).MergeArea.Item(1).Value

    d = d & mArea & Cells(i, 3) & vbCrLf

Next i

MsgBox d

End Sub

各月に正常に年が取得出来ました。

コードの説明

「mArea = Cells(i, 2).MergeArea.Item(1).Value」でループしているセルの結合範囲を取得し、取得した1つ目のItemを変数に格納しています。

これで、一番左上のセル以外をループしても常に1つ目の値を取得出来ます。

「d = d & mArea & Cells(i, 3) & vbCrLf」で変数に格納した年と右のセルの月を結合しています。

タイトルとURLをコピーしました