Home » Excel VBA Rangeオブジェクト » 結合セル » MergeArea.Itemとは

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

MergeArea.Itemとは

「vba mergearea.item」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

Excel VBA(Visual Basic for Applications)の「MergeArea.Item(xx)」といったコードを、どこかでご覧になった方による検索でしょう。

「MergeArea.Item」の意味がわからないので、何を表しているコードなのかを調べていたのではないか、と推測しています。

[スポンサードリンク]

Range.ItemとはコレクションとしてのRangeから単一のRangeオブジェクトを取得するオブジェクト式

Excel VBAの場合、Itemは、コレクションオブジェクトから、単一オブジェクトを取得するときに利用するプロパティ(またはメソッド)です。

例えば「Workbooks.Item(1)」というオブジェクト式で、Workbooksコレクションから、1つ目のブックを表すWorkbookオブジェクトを取得できます。

「Worksheets.Item(1)」というオブジェクト式で、Worksheetsコレクションから、1つ目のワークシートを表すWorksheetオブジェクトを取得できます。

「Charts.Item(1)」というオブジェクト式なら、Chartsコレクションから、1つ目のグラフシートを表すChartオブジェクトを取得できます。

MergeArea.Item(xx)というオブジェクト式も、これらのオブジェクト式の仲間です。

MergeAreaはRangeオブジェクトを返すプロパティですから、「MergeArea.Item」というコードは結局「Range.Item」です。
つまり、結合されているセル範囲を表す、コレクションとしてのRangeオブジェクトから、単一のRangeオブジェクトを取得するために、Itemプロパティを利用しているのが「MergeArea.Item」というオブジェクト式です。

コレクションとしてのRangeから単一オブジェクトのRangeを取得するサンプルマクロ

コレクションとしてのRangeオブジェクトを意識したことのない方は、以下のようなマクロをまずは実行してみるほうが理解しやすいかもしれません。

Sub コレクションとしてのRangeオブジェクトのItemプロパティを確認する()

 Dim rng As Range
 Dim i As Long

 Set rng = Range("A1:B2")

 For i = 1 To rng.Count
  MsgBox rng.Item(i).Address(False, False)
 Next i

End Sub

上記のマクロを実行すると、「A1」「B1」「A2」「B2」というセルアドレスを表す文字列が、順番に表示されます。

A1:B2セルを表す、コレクションとしてのRangeオブジェクトを、オブジェクト変数・rngにセットしておいて、
 Set rng = Range("A1:B2")

コレクションに含まれる単一オブジェクトの数だけFor~Nextループを回して、
 For i = 1 To rng.Count

コレクションに含まれる単一オブジェクトをItemプロパティで順番に取得して、そのセル番地をRange.Addressプロパティで取得して、メッセージボックスに表示しています。
  MsgBox rng.Item(i).Address(False, False)

ここで使っているItemプロパティが、MergeArea.ItemのItemと同じものです。

MergeArea.Itemを確認するサンプルマクロ

上記のマクロの動きを確認したら、本題のMergeArea.Itemを確認しましょう。

Sub MergeAreaのItemプロパティを確認する()

 Dim rng As Range
 Dim i As Long

 Set rng = ActiveCell.MergeArea

 For i = 1 To rng.Count
  MsgBox rng.Item(i).Address(False, False)
 Next i

End Sub

例えば、C3:D4セルを結合しておいて、その結合したセルを選択した状態で上記のマクロを実行すると、「C3」「D3」「C4」「D4」というセルアドレスを表す文字列が、順番に表示されます。

このマクロは先ほどのマクロと、ほとんど同じです。

違っているのは、オブジェクト変数・rngにセル範囲をセットしている
 Set rng = ActiveCell.MergeArea
の部分だけです。この部分が先のマクロでは
 Set rng = Range("A1:B2")
になっていました。

結合されているセルは、見た目は1個のセルっぽくなっていますが、実際には複数のセルです。

VBAから見ると、コレクションとしてのRangeです。

Range.ItemはコレクションとしてのRangeから、単一のRangeを取得するオブジェクト式です。

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » 結合セル » MergeArea.Itemとは

「結合セル」の記事一覧

検索


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

.