Home » Excel VBA Rangeオブジェクト » 結合セル » 結合セルの値を取得する-Range.MergeArea

結合セルの値を取得する-Range.MergeArea

対象:Excel2003, Excel2007, Excel2010, Excel2013

結合セルの値を取得するVBAのコード-Range.MergeAreaプロパティ

「Excelマクロで結合されているセルの値を取得するにはどうしたらいいのでしょうか?」
「セルが結合されていたときに、結合セルにはすべて先頭のセルの値が入っているように扱うには、どうしたらいいのでしょうか?」
といった趣旨のご質問をいただくことがあります。

[スポンサードリンク]

結合セルに対するループ処理のサンプル

例えば、下図のようなExcelシートがあったときに、

結合セルの値を取得するVBAのコード-Range.MergeAreaプロパティ

以下のようなマクロを実行すると、

Sub 結合セルのテスト()

 Dim i As Long
 Dim val As Variant

 For i = 1 To 6
  val = Cells(i, 1).Value
  MsgBox val
 Next 

End Sub

まず「2013」というメッセージボックスが表示されたあと、何も表示されていないメッセージボックスが2回表示され、「2014」というメッセージが表示されたあとに、何も表示されていないメッセージボックスが2回表示されます。

A1:A3セルが結合されているため、A1セルには「2013」という値が入力されているけれど、A2セル・A3セルは空っぽ、つづいて、A4:A6セルが結合されているため、A4セルには「2014」という値が入力されているけれど、A5セル・A6セルは空っぽという状態になっているためです。

そのため、ループ処理の中で、A1セル・A4セルの値を取得したときだけ「2013」「2014」がメッセージボックスに表示され、あとは空白のメッセージボックスが表示されるわけです。

これを、「2013」というメッセージボックスが3回表示されたあと、「2014」というメッセージボックスを3回表示されるようにするにはどうしたらいいのか、というのが先のご質問の趣旨です。

結合セルの値を取得するサンプルマクロ

実は、先のコードをほんの少しだけ修正すれば、結合セルがあったときに、結合セルの先頭の値が、他の結合されているセルにも入っているかのように扱えます。

Sub 結合セルの値を取得する()

 Dim i As Long
 Dim val As Variant
 
 For i = 1 To 6
  val = Cells(i, 1).MergeArea(1, 1).Value
  MsgBox val
 Next

End Sub

RangeオブジェクトのMergeAreaプロパティを使うと、結合されているセル範囲のRangeオブジェクトを取得することができるのです。

結合セルの値を取得するVBAのコード-Range.MergeAreaプロパティ

例えば、A1:A3セルが結合されているときは、「Range("A1").MergeArea」というオブジェクト式で、A1:A3セルが取得できます。

で、上記のマクロの、

 val = Cells(i, 1).MergeArea(1, 1).Value

で使われている「MergeArea(1, 1).Value」というオブジェクト式は、結合されているセル範囲の、1行目1列目の値を取得していることになります。

ですからA1:A3セル・A4:A6セルがそれぞれ結合されている場合に、

For i = 1 To 6
 val = Cells(i, 1).MergeArea(1, 1).Value

というコードを実行すると、ループの3回目まではA1セルの値が変数・valに格納されるので、「2013」というメッセージが3回表示され、ループの4回目から6回目はA4セルの値が変数・valに格納されるので、「2014」というメッセージが3回表示さることになります。

ちなみに、セル結合されていないときにMergeAreaプロパティを使った場合、「.MergeArea」の前で指定されているRangeオブジェクトが返され、エラーになったりはしません。ですから、エラー処理を入れたりする必要もなく、とても扱いやすいプロパティだと思います。

関連語句
VBA, Visual Basic for Applications
[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » 結合セル » 結合セルの値を取得する-Range.MergeArea

「結合セル」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.