Range オブジェクト (Excel)

セル、行、列、連続した1つ以上のセルブロックを含むセルの選択、または3D範囲を表します。

注意

複数のプラットフォーム間で Office エクスペリエンスを拡張するソリューションを開発することに関心がありますか? 新しい Office アドイン モデルを参照してください。 Office アドインは、VSTO アドインやソリューションに比べてフットプリントが小さく、HTML5、JavaScript、CSS3、XML などのほぼすべてのWeb プログラミング テクノロジーを使用して構築できます。

注釈

Range の既定のメンバーは、パラメーターなしの呼び出しを Value プロパティに転送し、パラメーター付きの呼び出しを Item メンバーに転送します。 したがって、someRange = someOtherRangesomeRange.Value = someOtherRange.ValuesomeRange(1)someRange.Item(1)someRange(1,1)someRange.Item(1,1)と同等です。

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

  • RangeCells プロパティ ワークシート オブジェクト
  • RangeCells プロパティ Range オブジェクト
  • Rows および Columns プロパティ (Worksheet オブジェクト内)
  • Rows および Columns プロパティ (Range オブジェクト内)
  • Offset プロパティ Range オブジェクト
  • Union メソッド アプリケーション オブジェクト

1 つのセルまたはセル範囲を表す Range オブジェクトを返すには、Range ( arg ) プロパティを使用し arg によって、範囲の名前を付けます。 次の例では、セル A1 の値をセル A5 に入力します。

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

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

ワークシートをアクティブにするには、Range プロパティをオブジェクト修飾子なしで使う前に、Worksheet オブジェクトの Activate メソッドを使います。

Worksheets("Sheet1").Activate 
Range("A1:H8").Formula = "=Rand()"    'Range is on the active sheet

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

注意

範囲アドレスに文字列引数を使用する場合、アドレスは A1 スタイルの形式で指定する必要があります。R1C1 スタイルの形式は使用できません。

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

ワークシート上の セル を使用して、ワークシート上のすべての単一セルで構成される範囲を取得します。 Item (rowcolumn) を介して単一のセルにアクセスできます。row は行インデックスで、column は列インデックスです。 Item は省略できます。呼び出しは Range のデフォルト メンバーによって転送されるためです。 以下の例では、アクティブなブックの最初のシートのセル A1 の値を 24 に、セル B1 の値を 42 に設定します。

Worksheets(1).Cells(1, 1).Value = 24
Worksheets(1).Cells.Item(1, 2).Value = 42

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

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

Range("A1") を使用してセル A1 を返すこともできますが、Cells プロパティでは、行または列の指定に変数を使用できるため、より便利です。 次の例では、シート 1 に列見出しと行見出しを作成します。 ワークシートをアクティブにした後は、Cells プロパティを使用できます。シートを明示的に宣言する必要はありません。作業中のシートのセルが返されます。

注意

A1 形式の参照を変更するのに Visual Basic の文字列関数を使用することもできますが、Cells(1, 1) 形式を使用したほうが簡単であり、より効率的なプログラミングを実践できます。

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

Use_expression_.Cells は、expression が単一のセルで構成される同じアドレスを持つ範囲を取得する Range オブジェクトを返す式を持ちます。 そのような範囲では、Item (rowcolumn) を介して単一のセルにアクセスします。これは、範囲の最初の領域の左上隅に関連しています。 Item は省略できます。呼び出しは Range のデフォルト メンバーによって転送されるためです。 以下の例では、アクティブなブックの最初のシートのセル C5 と D5 に数式を設定します。

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

Range オブジェクトを返すには、Range ( cell1, cell2 ) プロパティを使用します。ここで、引数 cell1 および引数 cell2 は開始セルおよび終了セルを指定する Range オブジェクトです。 次の例では、セル範囲 A1:J10 の罫線の種類を設定します。

注意

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

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

ワークシート上の を使用して、ワークシート上のすべての行で構成される範囲を取得します。 Item (row) を使用して、単一の行にアクセスできます。row は行インデックスです。 Item は省略できます。呼び出しは Range のデフォルト メンバーによって転送されるためです。

注意

行で構成される範囲に Item の 2 番目のパラメーターを指定することはできません。 最初に Cells を介して単一のセルに変換する必要があります。

以下の例では、アクティブなブックの最初のシートの行 5 と 10 を削除します。

Worksheets(1).Rows(10).Delete
Worksheets(1).Rows.Item(5).Delete

ワークシート上の を使用して、ワークシート上のすべての列で構成される範囲を取得します。 Item (row) [sic] を介して単一の列にアクセスできます。row は、数値または A1 スタイルの列アドレスとして指定された列インデックスです。 Item は省略できます。呼び出しは Range のデフォルト メンバーによって転送されるためです。

注意

列で構成される範囲に Item の 2 番目のパラメーターを指定することはできません。 最初に Cells を介して単一のセルに変換する必要があります。

以下の例では、アクティブなブックの最初のシートの列 "B"、"C"、"E" および "J" を削除します。

Worksheets(1).Columns(10).Delete
Worksheets(1).Columns.Item(5).Delete
Worksheets(1).Columns("C").Delete
Worksheets(1).Columns.Item("B").Delete

Use_expression_.Rows は、expression が範囲の最初の領域の行で構成される範囲を取得する Range オブジェクトを返す式を持ちます。 Item (row) を介して単一の行にアクセスできます。row は、範囲の最初の領域の上部からの相対的な行インデックスです。 Item は省略できます。呼び出しは Range のデフォルト メンバーによって転送されるためです。

注意

行で構成される範囲に Item の 2 番目のパラメーターを指定することはできません。 最初に Cells を介して単一のセルに変換する必要があります。

以下の例では、アクティブなブックの最初のシートの範囲 C8:D8 および C6:D6 を削除します。

Worksheets(1).Range("C5:D10").Rows(4).Delete
Worksheets(1).Range("C5:D10").Rows.Item(2).Delete

Use_expression_.Columns は、expression が範囲の最初の領域の列で構成される範囲を取得する Range オブジェクトを返す式を持ちます。 Item (row) [sic] を介して単一の列にアクセスできます。row は、数値または A1 スタイルの列アドレスとして指定された範囲の最初の領域の左からの相対列インデックスです。 Item は省略できます。呼び出しは Range のデフォルト メンバーによって転送されるためです。

注意

列で構成される範囲に Item の 2 番目のパラメーターを指定することはできません。 最初に Cells を介して単一のセルに変換する必要があります。

以下の例では、アクティブなブックの最初のシートの範囲 L2:L10、G2:G10、F2:F10 および D2:D10 を削除します。

Worksheets(1).Range("C5:Z10").Columns(10).Delete
Worksheets(1).Range("C5:Z10").Columns.Item(5).Delete
Worksheets(1).Range("C5:Z10").Columns("D").Delete
Worksheets(1).Range("C5:Z10").Columns.Item("B").Delete

指定されたオフセットの範囲を別の範囲に返すには、Offset ( row, column ) プロパティを使用します。ここで、引数 row は行のオフセット、引数 column は列のオフセットです。 次の例では、現在の選択範囲の左上隅にあるセル から3 行下で、1列右側を選択します。 作業中のワークシートではない場合、セルを選択できません。最初にワークシートをアクティブにしてください。

Worksheets("Sheet1").Activate 
  'Can't select unless the sheet is active 
Selection.Offset(3, 1).Range("A1").Select

複数領域の範囲、つまり複数の隣接するセル ブロックで構成される範囲を返すには、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 "You cannot carry out this command " & _ 
            "on multi-area selections" 
    End If 
End Sub

次の例は、Range オブジェクトの AdvancedFilter メソッドを使用して、列 A の範囲内で一意の値とその出現回数を示すリストを作成します。

Sub Create_Unique_List_Count()
    'Excel workbook, the source and target worksheets, and the source and target ranges.
    Dim wbBook As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim rnSource As Range
    Dim rnTarget As Range
    Dim rnUnique As Range
    'Variant to hold the unique data
    Dim vaUnique As Variant
    'Number of unique values in the data
    Dim lnCount As Long
    
    'Initialize the Excel objects
    Set wbBook = ThisWorkbook
    With wbBook
        Set wsSource = .Worksheets("Sheet1")
        Set wsTarget = .Worksheets("Sheet2")
    End With
    
    'On the source worksheet, set the range to the data stored in column A
    With wsSource
        Set rnSource = .Range(.Range("A1"), .Range("A100").End(xlDown))
    End With
    
    'On the target worksheet, set the range as column A.
    Set rnTarget = wsTarget.Range("A1")
    
    'Use AdvancedFilter to copy the data from the source to the target,
    'while filtering for duplicate values.
    rnSource.AdvancedFilter Action:=xlFilterCopy, _
                            CopyToRange:=rnTarget, _
                            Unique:=True
                            
    'On the target worksheet, set the unique range on Column A, excluding the first cell
    '(which will contain the "List" header for the column).
    With wsTarget
        Set rnUnique = .Range(.Range("A2"), .Range("A100").End(xlUp))
    End With
    
    'Assign all the values of the Unique range into the Unique variant.
    vaUnique = rnUnique.Value
    
    'Count the number of occurrences of every unique value in the source data,
    'and list it next to its relevant value.
    For lnCount = 1 To UBound(vaUnique)
        rnUnique(lnCount, 1).Offset(0, 1).Value = _
            Application.Evaluate("COUNTIF(" & _
            rnSource.Address(External:=True) & _
            ",""" & rnUnique(lnCount, 1).Text & """)")
    Next lnCount
    
    'Label the column of occurrences with "Occurrences"
    With rnTarget.Offset(0, 1)
        .Value = "Occurrences"
        .Font.Bold = True
    End With

End Sub

メソッド

プロパティ

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。