更新日:、 作成日:
VBA セルを範囲指定して取得する (Range, Cells)
はじめに
Excel VBA マクロでセルを範囲指定する方法や、セルの範囲を取得する方法を紹介します。
Range("B1") または Cells(1, 2) プロパティから、セル「B1」を取得できます。
Range("A1:B2") プロパティから、セルの範囲「A1」~「B2」を取得できます。Cells からシート全体を取得できます。
ActiveCell から、アクティブセルを取得できます。
Selection から、範囲選択しているセルを取得できます。
セルを範囲指定して取得する
Range を使用してセルを範囲指定して取得できます。Cells からシート全体を取得できます。
セル名を指定
Range の引数にセル名を指定すると、そのセルを取得できます。
セル「A1」を取得するには Range("A1") を入力します。
Dim c As Range
Set c = Range("A1")
Debug.Print(c.Value)
行と列番号を指定
Cells の引数にセルの行と列の番号を指定すると、そのセルを取得できます。
行「2」、列「A」のセルを取得するには Cells(2, 1) を入力します。
Dim c As Range
Set c = Cells(1, 1) ' A1
Set c = Cells(2, 1) ' A2
Set c = Cells(1, 2) ' B1
Set c = Cells(2, 2) ' B2
Debug.Print(c.Value)
セルを範囲指定
セルの範囲「A1」~「B2」を取得するには Range("A1:B2") または Range("A1", "B2") を入力します。または直接そのセルを指定します。
Dim c As Range
Set c = Range("A1:B2")
Set c = Range("A1", "B2")
Set c = Range(Range("A1"), Range("B2"))
Set c = Range(Cells(1, 1), Cells(2, 2))
c.Select
シート全体
シート全体のセルを取得するには Cells を入力します。
Dim c As Range
Set c = Cells ' すべてのセル
c.Select
離れたセルを指定
セル「A1」と「B2」を取得するには Range("A1, B2") を入力します。
Dim c As Range
Set c = Range("A1, B2")
c.Select
または Union(Range("A1"), Range("B2")) を入力します。
Union を使用すると、指定した 2 つのセルを組み合わせた範囲を取得できます。
Dim c As Range
Set c = Union(Range("A1"), Range("B2")) ' A1 と B2
Set c = Union(c, Range("C3:D4")) ' A1 と B2 と C3 ~ D4
c.Select
スポンサーリンク
セルを指定して取得する
アクティブセルを取得
アクティブセルを取得するには ActiveCell を入力します。
Dim c As Range
Set c = ActiveCell
Debug.Print(c.Value)
アクティブセルとは、フォーカスがあるセルのことです。
選択セルを取得
選択しているセルを取得するには Selection を入力します。範囲選択しているときは、その範囲のセルを取得します。
Dim s As Range
Set s = Selection
Dim c As Range
For Each c In s
Debug.Print(c.Value)
Next
前のセルを取得
指定したセルの左のセルを取得するには Range.Previous を入力します。
これは Excel で Shift + Tab キーを入力したときと同じセルを取得します。
A 列のセルで Previous を入力するとエラーになります。
セルの範囲「B1」~「C2」で Previous を入力するとセル「A1」が取得されます。セルの範囲の左上のセル「B1」の左のセルが取得されます。
Dim c As Range
Set c = ActiveCell.Previous
Set c = Range("C2").Previous
Debug.Print(c.Value)
次のセルを取得
指定したセルの次のセルを取得するには Range.Next を入力します。
これは Excel で Tab キーを入力したときと同じセルを取得します。
セルの範囲「A1」~「B2」で Next を入力するとセル「B1」が取得されます。セルの範囲の左上のセル「A1」の右のセルが取得されます。
Dim c As Range
Set c = ActiveCell.Next
Set c = Range("B2").Next
Debug.Print(c.Value)
最終セルを取得
指定したセルの終端を取得するには Range.End(方向) のように入力します。
これは Excel で Ctrl + ↑↓←→ キーを入力したときと同じセルを取得できます。
方向には次のものがあります。
定数名 | 値 | 説明 |
xlUp | -4162 | 上端 |
xlDown | -4121 | 下端 |
xlToLeft | -4159 | 左端 |
xlToRight | -4161 | 右端 |
Dim c As Range
Set c = ActiveCell.End(xlUp) ' アクティブセルの上端のセルを取得
Set c = ActiveCell.End(xlDown) ' アクティブセルの下端のセルを取得
Debug.Print(c.Value)
セル「B2」で xlDown を指定したときは、セル「B6」を取得します。
セル「C2」で xlDown を指定したときは、セル「C3」を取得します。
指定したセルから Excel で Ctrl + ↑↓←→ キーを入力したときの範囲のセルを取得するには次のように入力します。
Dim c As Range
Set c = Range("D6") ' D6 を基準にして取得
Range(Cells(c.End(xlUp).Row, c.End(xlToLeft).Column), Cells(c.End(xlDown).Row, c.End(xlToRight).Column)).Select
移動した位置を取得
指定したセルから移動した位置のセルを取得するには Range.Offset を入力します。
セル「B2」から行「1」、列「0」移動したセルを取得するには Range("B2").Offset(1, 0) を入力します。
Dim c As Range
Set c = Range("B2")
Debug.Print(c.Offset(1, 0).Value) ' B3
Debug.Print(c.Offset(-1, 0).Value) ' B1
Debug.Print(c.Offset(0, 1).Value) ' C2
Debug.Print(c.Offset(0, -1).Value) ' A2
行数に正の値を指定すると下に、負の値を指定すると上に移動します。
列数に正の値を指定すると右に、負の値を指定すると左に移動します。
Cells でも移動した位置のセルを取得できます。
Dim c As Range
Set c = Range("B2")
Debug.Print(c.Cells(2, 1).Value) ' B3
Debug.Print(c.Cells(0, 1).Value) ' B1
Debug.Print(c.Cells(1, 2).Value) ' C2
Debug.Print(c.Cells(1, 0).Value) ' A2
Offset と Cells の違いは次の通りです。
- Offset:基準のセルは (0, 0)、基準がセルの範囲のときは移動したセルの範囲を取得。
- Cells:基準のセルは (1, 1)、基準がセルの範囲のときは、左上のセルから移動したセルを取得
その他を範囲指定して取得する
行を取得
行「2」を取得するには Rows(2) を入力します。
Dim r As Range
Set r = Rows(2) ' 2 行目
r.Select
列を取得
列「A」を取得するには Columns(1) または Columns("A") を入力します。
Dim r As Range
Set r = Columns(1) ' A 列
Set r = Columns("A") ' A 列
Set r = Columns(3) ' C 列
r.Select
行数と列数を指定して取得
セル「B2」から行数 2 と列数 3 の範囲を取得するには Range("B2").Resize(2, 3) を入力します。セルの範囲「B2」~「D3」を取得します。
Dim c As Range
Set c = Range("B2").Resize(2, 3)
c.Select
セルの範囲に対して入力すると、範囲を拡張したり縮小したりできます。引数を片方だけ指定すると、もう片方は指定した範囲のままです。
Dim c As Range
Set c = Range("B2:C3").Resize(RowSize:=1) ' 行数のみ縮小 (B2:C2)
Set c = Range("B2:C3").Resize(RowSize:=3) ' 行数のみ拡大 (B2:C4)
Set c = Range("B2:C3").Resize(ColumnSize:=1) ' 列数のみ縮小 (B2:B3)
Set c = Range("B2:C3").Resize(ColumnSize:=3) ' 列数のみ拡大 (B2:D3)
c.Select
データの範囲を取得
指定したセルを囲むデータがある範囲を取得するには Range.CurrentRegion を入力します。
これは Excel で Ctrl + Shift + * キーを入力したときと同じセルを取得します。
Dim c As Range
Set c = Range("B2").CurrentRegion
Set c = Range("B6").CurrentRegion
Set c = Range("B10").CurrentRegion
c.Select
セル「B2」、「B6」、「B10」で実行すると、次の範囲が取得されます。
使用されている範囲を取得
使用されているセルの最大範囲を取得するには UsedRange を入力します。
Dim c As Range
Set c = UsedRange
c.Select
最大範囲とはシートに入力されている一番上、下、左、右のセルの範囲です。書式設定されているセルも含まれます。
条件に一致するセルを取得
条件に一致するセルを取得するには Range.SpecialCells(条件) のように入力します。
1 つのセルに対して指定すると、シート全体で条件に一致するセルを取得します。
セルの範囲に対して指定すると、その範囲内で条件に一致するセルを取得します。
条件には次のものがあります。
定数名 | 値 | 説明 |
xlCellTypeAllFormatConditions | -4172 | 条件付き書式が設定されているセル |
xlCellTypeAllValidation | -4174 | 入力規制が設定が含まれているセル |
xlCellTypeBlanks | 4 | 空のセル |
xlCellTypeComments | -4144 | コメントが含まれているセル |
xlCellTypeConstants | 2 | 定数が入力されているセル |
xlCellTypeFormulas | -4123 | 数式が入力されているセル |
xlCellTypeLastCell | 11 | シート全体の最後のセル |
xlCellTypeSameFormatConditions | -4173 | 同じ条件付き書式が設定されているセル |
xlCellTypeSameValidation | -4175 | 同じ入力規制が設定が含まれているセル |
xlCellTypeVisible | 12 | 非表示になっていないセル |
xlCellTypeConstants か xlCellTypeFormulas を指定したときは、第 2 引数に次の値を組み合わせて指定できます。
定数名 | 値 | 説明 |
xlErrors | 16 | エラー値 |
xlLogical | 4 | 論理値 |
xlNumbers | 1 | 数値 |
xlTextValues | 2 | 文字 |
Dim c As Range
' シート全体から文字が入っているセルを取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues)
' シート全体から文字と数値が入っているセルを取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues Or xlNumbers)
' シート全体からコメントが設定されているセルを取得
Set c = Cells.SpecialCells(xlCellTypeComments)
' A1 ~ C3 の範囲から文字が入っているセルを取得
Set c = Range("A1:C3").SpecialCells(xlCellTypeConstants, xlTextValues)
c.Select
条件に一致するセルが見つからないときは「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。
セルの範囲を操作する
セルの範囲など複数のセルを取得したときは For Each ですべてのセルを操作できます。
Dim r As Range
Set r = Range("A1:B2") ' A1 ~ B2
Dim c As Range
For Each c In r
Debug.Print(c.Value) ' A1, B1, A2, B2 の順で取得
Next
別シートのセルを取得する
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。
Dim c As Range
' Sheet1 のセル「A1」を取得
Set c = Worksheets("Sheet1").Range("A1")
Set c = Worksheets(1).Range("A1")
' Sheet2 のセル「A1」を取得
Set c = Worksheets("Sheet2").Range("A1")
Set c = Worksheets(2).Range("A1")
Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。
' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"
標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。
' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"
スポンサーリンク