Range コレクション

Microsoft Excel Visual Basic のリファレンス

Range コレクション

複数のオブジェクト
Range
複数のオブジェクト

セル、行、列、1 つ以上のセル範囲を含む選択範囲、または 3-D 範囲を表します。

使い方

Range オブジェクトを取得するプロパティ、およびメソッドを次に示します。

  • Range プロパティ
  • Cells プロパティ
  • Range プロパティおよび Cells プロパティ
  • Offset プロパティ
  • Union メソッド

Range プロパティ

1 つのセルまたはセル範囲を表す Range オブジェクトを取得するには、Range(arg) プロパティを使用します。引数 arg には、範囲の名前を指定します。次の使用例は、セル A1 の値をセル A5 に入力します。

Worksheets("Sheet1").Range("A5").Value = _
    Worksheets("Sheet1").Range("A1").Value
		

次の使用例は、セル範囲 A1:H8 の各セルに、数式を使用して乱数を設定します。オブジェクト修飾子 (ピリオドの左側に記述するオブジェクト) を指定せずに使った場合、Range プロパティは作業中のワークシートのセル範囲を返します。作業中のワークシートではない場合、このメソッドは失敗します。オブジェクト ID を指定せずに Range プロパティを使うときは、その前に Activate メソッドを使ってアクティブにしてください。

Worksheets("Sheet1").Activate
Range("A1:H8").Formula = "=Rand()"    '範囲は、アクティブ シート上にあります。
		

次の使用例は、Criteria という名前のセル範囲の内容を消去します。

Worksheets(1).Range("Criteria").ClearContents
		

セル範囲の参照を引数に指定する場合、参照は A1 形式で指定します。R1C1 形式は使用できません。

Cells プロパティ

1 つのセルを取得するには、Cells(row, column) プロパティを使用します。引数 row には、行のインデックスを指定します。引数 column には、列のインデックスを指定します。次の使用例は、セル A1 の値に 24 を設定します。

Worksheets(1).Cells(1, 1).Value = 24
		

次の使用例は、セル A2 に数式を設定します。

ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"
		

Range("A1") という記述でセル A1 を取得することもできますが、Cells プロパティでは、行または列の指定に変数を使用できるため、便利な場合があります。次の使用例は、シート 1 に列見出しと行見出しを作成します。ワークシートをアクティブにした後は、シートを指定せずに、Cells プロパティを使えることに注意してください。シートが指定されない場合、Cells プロパティは作業中のワークシートのセルを返します。

Sub SetUpTable()
Worksheets("Sheet1").Activate
For TheYear = 1 To 5
    Cells(1, TheYear + 1).Value = 1990 + TheYear
Next TheYear
For TheQuarter = 1 To 4
    Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarter
Next TheQuarter
End Sub
		

Cells プロパティで引数の数値を変化させる代わりに、Visual Basic の文字列関数を使って A1 形式の参照文字列を変化させることもできますが、Cells(1, 1) という記述の方が簡単であり、効率的なプログラミングの方法です。

セル範囲の一部を取得するには、expression.Cells(row, column) を使用します。expression には、Range オブジェクトを返すオブジェクト式を指定します。セル範囲の左上端を基準にして、引数 row と引数 column を指定します。次の使用例は、セル C5 に数式を設定します。

Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
		

Range プロパティおよび Cells プロパティ

Range オブジェクトを取得するには、Range(cell1, cell2) プロパティを使用します。引数 cell1 には最初のセルを指定します。引数 cell2 には最後のセルを指定します。次の使用例は、セル範囲 A1:J10 の罫線の線の種類を設定します。

With Worksheets(1)
    .Range(.Cells(1, 1), _
        .Cells(10, 10)).Borders.LineStyle = xlThick
End With
		

上の使用例では、すべての Cells プロパティの前にピリオドがあることに注意してください。使用例の最初の行にある With ステートメントの結果に Cells プロパティに使用するには、ピリオドが必要です。上の使用例では、Cells プロパティをワークシート 1 に使用することを、ピリオドが示しています。ピリオドを記述しなかった場合には、Cells プロパティは作業中のワークシートのセルを返します。

Offset プロパティ

あるセル範囲から指定された相対位置にあるセル範囲を取得するには、Offset(row, column) プロパティを使用します。引数 row には、相対位置とする行を指定します。引数 column には相対位置とする列を指定します。次の使用例では、現在選択されているセル範囲の左上端のセルから 3 行下、1 列右のセルを選択します。作業中のワークシートのセルしか選択できないので、指定するセルのあるワークシートを最初に選択しておく必要があります。

Worksheets("Sheet1").Activate
  'シートがアクティブでない場合は選択できません。
Selection.Offset(3, 1).Range("A1").Select
		

Union メソッド

複数選択範囲、つまり複数のセル範囲の集合を取得するには、Union(range1, range2, ...) メソッド使用します。次の使用例では、オブジェクトを作成し、それをセル範囲 A1:B2 およびセル範囲 C3:D4 の集合として定義し、選択します。

Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
Worksheets("sheet1").Activate
Set r1 = Range("A1:B2")
Set r2 = Range("C3:D4")
Set myMultiAreaRange = Union(r1, r2)
myMultiAreaRange.Select
		

複数の領域を含む選択範囲を操作する場合は、Areas プロパティを使用すると便利です。このメソッドは、複数の選択範囲を個別の Range オブジェクトに分割した後、それをコレクションとして返します。取得されたコレクションの Count プロパティを使うと、次の使用例のように選択範囲に複数の領域が含まれているかどうかを確認できます。

Sub NoMultiAreaSelection()
    NumberOfSelectedAreas = Selection.Areas.Count
    If NumberOfSelectedAreas > 1 Then
        MsgBox "このコマンドは" & _
            "複数の選択範囲に対して実行できません。"
    End If
End Sub