Excel VBAでセルを取得する:Range

VBA でセルの値や書式などを設定したいセルや範囲を取得する場合には、Range オブジェクトを使います。ここでは、Range オブジェクトを取得する Range プロパティの使い方について説明します。

Range プロパティは VBA で頻繁に使用するので、ぜひ覚えておきましょう。

Range プロパティの使い方

Range オブジェクトを取得する構文は以下の通りです。

Range("セル範囲")

引数には A1 や J5 などの1つのセルや、A1:H8, J2:K13 など範囲を指定することができます。

セルを取得する

以下は、セルB2に「おはよう!」と表示する例です。

Range("B2").Value = "おはよう!"

Value プロパティを使うことで、取得した Range オブジェクトのセルに値を設定することができます。

vba_range1

範囲を取得する

範囲を取得する例も見てみましょう。以下は、セルA1~セルC4までのすべてのセルに「おはよう!」と表示する例です。

Range("A1:C4").Value = "おはよう!"

vba_range2

複数範囲を取得する

それぞれのセル範囲をカンマで区切って指定することで、離れた位置にある範囲を複数取得することができます。

以下は、セルA1、セルC3、セル範囲 E1~F5 に「おはよう!」と表示する例です。

Range("A1,C3,E1:F5").Value = "おはよう!"

vba_range5

シートを指定してセルを取得する

Range("セル範囲") と記述した場合は、現在のアクティブなシートのセル範囲が取得されます

もし特定のシートにあるセルを指定したい場合には以下のように記述します。

Worksheets("シート名").Range("セル範囲")

以下は、Sheet2 の B2 のセルに「おはよう!」と表示する例です。

Worksheets("Sheet2").Range("B2").Value = "おはよう!"

vba_range3

Range と Cell の違い

Cells プロパティを利用すれば Range オブジェクトを取得することもできます。

Cells(行番号, 列番号)

Range プロパティと違い、行番号も列番号も数字で指定します。数字は1から始まり、たとえば A1 だと Cells(1, 1)、B2 だと Cells(2, 2) のような形になります。

Cells プロパティから得られるオブジェクトは Cell オブジェクトではなくRange オブジェクトです。

Range と Cells と主な違いは以下の通りです。

・Cells は独立したセル範囲しか指定できない。
・Cells の方が Range より処理スピートが速い。
・Cells は繰り返し処理を行う場合に番号で指定できるので、簡潔に記述できる。

たとえば、以下のような For Next 文を使用する場合は、Range プロパティより Cells プロパティの方が適しています。

Dim i As Integer
For i = 1 To 5
    Cells(1, i).Value = "おはよう!"
Next

 Cellsプロパティを使ってセル A1 からセル E1 に「おはよう!」と表示されます。

vba_range4

プログラムによって Cells プロパティと Range プロパティを使い分けるといいでしょう。


イベント

2017/12/05(火)
Design Thinking Square