Home » Excel VBA Rangeオブジェクト » Cellsプロパティ » Rangeオブジェクトに対してRangeプロパティを使う?

Rangeオブジェクトに対してRangeプロパティを使う?

対象:Excel2010, Excel2013, Windows版Excel2016

「rangeオブジェクトに対してrangeプロパティを使う」
という検索キーワードでアクセスがありました。

調べてみると、
  Range("B1:D4").Range("B1")
のような、RangeオブジェクトのRangeプロパティを使ったコードを紹介しているページが、

オブジェクトブラウザー:Range.Range

みつかります。

[スポンサードリンク]

Rangeオブジェクトに対してRangeプロパティを使った場合

RangeオブジェクトのRangeプロパティを使っている、
  Range("B1:D4").Range("B1")
というオブジェクト式が、どのセルを表すRangeオブジェクトを返すか、わかりますか?

B1:D4セルの中で、B1的な位置にあるセル(つまり2列目1行目のセル)ですから、C1セルを表すRangeオブジェクトを返します。

間違ってはいませんが、このようなコードを書くことを私はおすすめしません。

知識として知っておくのは、もちろん悪くはありませんけれど、他の人が読むプロシージャに、
  Range("B1:D4").Range("B1")
といった可読性の低い紛らわしいコードを残すことは、全くおすすめできません。

RangeオブジェクトのItemプロパティがおすすめ

B1:D4セルの中で、1行目2列目のセルを表すRangeオブジェクトを取得する必要がある場合、私ならば、
  Range("B1:D4").Item(1, 2)
と書きます。

RangeオブジェクトのItemプロパティを使うと、何行目・何列目といった数値を指定して、Rangeオブジェクトを取得できます。

オブジェクトブラウザー:Range.Item

コレクションとしてのRangeオブジェクトから、単独のRangeオブジェクトを取得するのがItemプロパティです。

なお、Excel VBAの経験があっても、RangeオブジェクトのItemプロパティはご存知の方がどうも少ないようですから、その場合Cellsプロパティを使った、
  Range("B1:D4").Cells(1, 2)
です。

Cellsは実際には引数を指定できないプロパティですから、
  Range("B1:D4").Cells(1, 2)
は結局、
  Range("B1:D4").Cells.Item(1, 2)
の省略形なのですが。

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » Cellsプロパティ » Rangeオブジェクトに対してRangeプロパティを使う?

「Cellsプロパティ」の記事一覧

検索


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

.