« [エクセル] セルの種類 | トップページ | 攻殻機動隊 »

[エクセル] Rangeオブジェクト、Areasコレクション。

Rangeオブジェクト、Areasコレクション。と、セルの範囲について。
セルの呼び方は、http://arrow3.way-nifty.com/shige/2004/08/excel__2.html

Range.jpg

Rangeオブジェクトは、オブジェクトでありコレクションです。ヘルプには、「Rangeコレクション」と書かれてます。つまり、1つのセルでも複数のセルでも参照可能です。なので、Rangeオブジェクトには、単一セル/単一セル範囲(複数セル)/複数セル範囲(複数セル)の3つの参照が入ってる可能性があります。

Areasコレクションは、コレクションです。Areaオブジェクトは無くて、その役割はRangeオブジェクトがやってます。これを使うのは、複数セル範囲が参照されているRangeオブジェクトを使うときがメインです。RangeオブジェクトのAreasプロパティは、Areasコレクションを返しますので、使い方は下のとおり。

Dim MyRange As Range
Dim MyRange2 As Range
Dim MyAreas As Areas
Set MyAreas = Myrange.Areas

単一セルと複数セル

単一セルと複数セルを見分けるには、
 MyRange.Count
で、セルの数を見ます。単一セルなら、「1」。複数セルなら「2」以上が返ってきます。

複数セルの場合、
 For Each MyRange2 In MyRange
  MsgBox MyRange2.Value
 Next
で全部に処理できます。

単一セルのときは、MyRange.Value でいけます。

RangeオブジェクトのItemプロパティは普通じゃないので、MyRange.Item(5)とかしても、5つ目のセルを指定したことにはなりません。こういう事をしたい時はどうすればいいのか、不明です。

単一セル範囲と複数セル範囲

単一セル範囲と複数セル範囲を見分けるには、
 MyAreas.Count
で、領域の数を見ます。単一セル範囲なら、「1」。複数セル範囲なら「2」以上がかえってきます。

Areasコレクションの中には、単一セル範囲(=領域)づつに分解されたRangeオブジェクトがはいってます。単一セル範囲の場合は、含まれるRangeオブジェクトは1個。複数セル範囲の場合は、含まれるRangeオブジェクトは複数個。

 For Each MyRange2 In MyAreas
  MsgBox MyRange2.Count
 Next

とかで、処理できます。が、このMyRange2は、単一セルとは限りません。複数セルの可能性もあるので、Valueプロパティとかは指定出来ません。MyRange2が複数セル範囲であることはありえないので、もう一段For Eachを組んでやれば、全部の(単一)セルに対して処理可能です。

AreasコレクションのItemプロパティは普通なので、
 MyAreas.Item(1).Count
で、1つ目のセル範囲のセルの数を返します。これが、「1」なら、MyAreas.Item(1) は単一セル。「2」以上なら、複数セル(単一セル範囲)です。

意味ないけど、
 MyAreas.Item(1).Areas.Count
が、1以外になることはありえません。

|

« [エクセル] セルの種類 | トップページ | 攻殻機動隊 »

「VBA」カテゴリの記事

「エクセル」カテゴリの記事

「パソコン・インターネット」カテゴリの記事

コメント

すごくわかりやすくてびっくりした
なるほどこういうことだったのか。
どうもありがとう

投稿: く | 2007年6月29日 (金) 午後 02時59分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/44406/1293044

この記事へのトラックバック一覧です: [エクセル] Rangeオブジェクト、Areasコレクション。:

« [エクセル] セルの種類 | トップページ | 攻殻機動隊 »