Range オブジェクト (Excel)Range object (Excel)

セル、行、列、連続した1つ以上のセルブロックを含むセルの選択、または3D範囲を表します。Represents a cell, a row, a column, a selection of cells containing one or more contiguous blocks of cells, or a 3D range.


Range オブジェクトを取得するプロパティおよびメソッドを次に示しますセクション:The following properties and methods for returning a Range object are described in the Example section:

  • Range と**Cells** プロパティワークシートオブジェクトRange and Cells properties of the Worksheet object
  • Range と**Cells** プロパティRangeオブジェクトRange and Cells properties of the Range object
  • Offset プロパティRangeオブジェクトOffset property of the Range object
  • Union メソッドアプリケーションオブジェクトUnion method of the Application object


1 つのセルまたはセル範囲を表す Range オブジェクトを返すには、Range ( arg ) プロパティを使用し_arg_ によって、範囲の名前を付けます。Use Range (arg), where arg names the range, to return a Range object that represents a single cell or a range of cells. 次の例では、セル A1 の値をセル A5 に入力します。The following example places the value of cell A1 in cell A5.

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

次の使用例は、セル範囲 A1:H8 の各セルに、数式を使用して乱数を設定します。The following example fills the range A1:H8 with random numbers by setting the formula for each cell in the range. オブジェクト修飾子 (ピリオドの左側に記述するオブジェクト) を指定せずに使用した場合、Range プロパティは作業中のワークシートの範囲を返します。When it's used without an object qualifier (an object to the left of the period), the Range property returns a range on the active sheet. 作業中のワークシートではない場合、このメソッドは失敗します。If the active sheet isn't a worksheet, the method fails.

ワークシートをアクティブにするには、Range プロパティをオブジェクト修飾子なしで使う前に、Worksheet オブジェクトの Activate メソッドを使います。Use the Activate method of the Worksheet object to activate a worksheet before you use the Range property without an explicit object qualifier.

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

次の使用例は、Criteria という名前のセル範囲の内容を消去します。The following example clears the contents of the range named Criteria.


範囲アドレスに文字列引数を使用する場合、アドレスは A1 スタイルの形式で指定する必要があります。R1C1 スタイルの形式は使用できません。If you use a text argument for the range address, you must specify the address in A1-style notation (you cannot use R1C1-style notation).


1 つのセルを返すには、Cells ( row, column ) プロパティを使用します。ここで、引数 row は行のインデックス、引数 column は列のインデックスです。Use Cells (row, column), where row is the row index and column is the column index, to return a single cell. 次の例では、セル A1 の値に 24 を設定します。The following example sets the value of cell A1 to 24.

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

次の使用例は、セル A2 に数式を設定します。The following example sets the formula for cell A2.

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

Range("A1") を使用してセル A1 を返すこともできますが、Cells プロパティでは、行または列の指定に変数を使用できるため、より便利です。Although you can also use Range("A1") to return cell A1, there may be times when the Cells property is more convenient because you can use a variable for the row or column. 次の例では、シート 1 に列見出しと行見出しを作成します。The following example creates column and row headings on Sheet1. ワークシートをアクティブにした後は、Cells プロパティを使用できます。シートを明示的に宣言する必要はありません。作業中のシートのセルが返されます。Be aware that after the worksheet has been activated, the Cells property can be used without an explicit sheet declaration (it returns a cell on the active sheet).


A1 形式の参照を変更するのに Visual Basic の文字列関数を使用することもできますが、Cells(1, 1) 形式を使用したほうが簡単であり、より効率的なプログラミングを実践できます。Although you could use Visual Basic string functions to alter A1-style references, it is easier (and better programming practice) to use the Cells(1, 1) notation.

Sub SetUpTable() 
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 ()を使用します。 ここで_式_はRange オブジェクト を返すことを表し、rowcolumn は範囲の左上端を基準にします。Use_expression_.Cells (row, column), where expression is an expression that returns a Range object, and row and column are relative to the upper-left corner of the range, to return part of a range. 次の例では、セル C5 に数式を設定します。The following example sets the formula for cell C5.

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

Range オブジェクトを返すには、Range ( cell1, cell2 ) プロパティを使用します。ここで、引数 cell1 および引数 cell2 は開始セルおよび終了セルを指定する Range オブジェクトです。Use Range (cell1, cell2), where cell1 and cell2 are Range objects that specify the start and end cells, to return a Range object. 次の例では、セル範囲 A1:J10 の罫線の種類を設定します。The following example sets the border line style for cells A1:J10.


上記のWithステートメントの結果をCellsプロパティに適用する場合には、すべてのCells プロパティの前にピリオドが必要になることに注意してください。Be aware that the period in front of each occurrence of the Cells property is required if the result of the preceding With statement is to be applied to the Cells property. この場合、セルがワークシートにあることを示しています (ピリオドがない場合、Cells プロパティは、作業中のワークシートのセルを返します)。In this case, it indicates that the cells are on worksheet one (without the period, the Cells property would return cells on the active sheet).

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

指定されたオフセットの範囲を別の範囲に返すには、Offset ( row, column ) プロパティを使用します。ここで、引数 row は行のオフセット、引数 column は列のオフセットです。Use Offset (row, column), where row and column are the row and column offsets, to return a range at a specified offset to another range. 次の例では、現在の選択範囲の左上隅にあるセル から3 行下で、1列右側を選択します。The following example selects the cell three rows down from and one column to the right of the cell in the upper-left corner of the current selection. 作業中のワークシートではない場合、セルを選択できません。最初にワークシートをアクティブにしてください。You cannot select a cell that is not on the active sheet, so you must first activate the worksheet.

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

複数領域の範囲、つまり複数の隣接するセル ブロックで構成される範囲を返すには、Union ( range1, range2, ...) を使用します。Use Union (range1, range2, ...) to return multiple-area ranges—that is, ranges composed of two or more contiguous blocks of cells. 次の例では、セル範囲 A1:B2 およびセル範囲 C3:D4 の集合として定義されるオブジェクトを作成し、定義された範囲を選択します。The following example creates an object defined as the union of ranges A1:B2 and C3:D4, and then selects the defined range.

Dim r1 As Range, r2 As Range, myMultiAreaRange As Range 
Set r1 = Range("A1:B2") 
Set r2 = Range("C3:D4") 
Set myMultiAreaRange = Union(r1, r2) 

複数の領域を含む選択範囲で作業する場合は、Areas プロパティを使用すると便利です。If you work with selections that contain more than one area, the Areas property is useful. 複数の選択範囲を個別の Range オブジェクトに分割した後、それをコレクションとして返します。It divides a multiple-area selection into individual Range objects and then returns the objects as a collection. 取得されたコレクションの Count プロパティを使用すると、次の使用例のように、複数の領域が含まれている選択範囲を確認できます。You can use the Count property on the returned collection to verify a selection that contains more than one area, as shown in the following example.

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 の範囲内で一意の値とその出現回数を示すリストを作成します。This example uses the AdvancedFilter method of the Range object to create a list of the unique values, and the number of times those unique values occur, in the range of column 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, _
    '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



関連項目See also

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.