サイトについて      連絡先   検索

VBA セルを取得する

はじめに

Excel VBA のセルを取得する方法を紹介します。

Range プロパティか Cells プロパティからセルを取得できます。

セルを取得すると値を入力したり書式を設定したりと、セルに対する操作ができるようになります。

セルを取得する

名前で取得

Range の引数にセル名を指定すると、そのセルを選択できます。

セル「A1」を取得するには Range("A1") のように指定します。

Dim c As Range
Set c = Range("A1")
Debug.Print(c.Value)
4

行と列番号で取得

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)
5

アクティブセルを取得

ActiveCell と指定すると、アクティブなセルを取得できます。

Dim c As Range
Set c = ActiveCell
Debug.Print(c.Value)
6

選択セルを取得

Selection と指定すると、選択しているセルを取得できます。範囲選択されているときはその範囲のセルを取得します。

Dim c As Range
Set c = Selection
Debug.Print(c.Value)
7

前のセルを取得

Range.Previous と指定すると、指定したセルの前のセルを取得できます。

これは Excel で Shift + Tab キーを入力したときと同じセルを取得します。

Dim c As Range
Set c = ActiveCell.Previous
Debug.Print(c.Value)
8

次のセルを取得

Range.Next と指定すると、指定したセルの次のセルを取得できます。

これは Excel で Tab キーを入力したときと同じセルを取得します。

Dim c As Range
Set c = ActiveCell.Next
Debug.Print(c.Value)
9

最終セルを取得

Range.End の引数に方向を指定すると、指定したセルの終端のセルを取得できます。

これは Excel で End + ↑↓←→ キーを入力したときと同じセルを取得できます。

方向には次のものがあります。

定数名 説明
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」で End(xlDown) としたときはセル「B6」を取得します。

セル「C2」で End(xlDown) としたときはセル「C3」を取得します。

3

オフセット位置を取得

Range.Offset の引数に行と列の数を指定すると、指定したセルから指定した数分ずれたセルを取得できます。

行に正の値を指定すると右にずれます。

列に正の値を指定すると下にずれます。

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
10

セルの範囲を取得する

セルの範囲を取得

セルの範囲「A1」~「B2」を取得するには Range("A1:B2") または Range("A1", "B2") のように指定します。

Dim c As Range
Set c = Range("A1:B2")
Set c = Range("A1", "B2")
c.Select

離れたセルを取得

セル「A1」と「B2」と「C3」を取得するには Range("A1, B2, C3") のように指定します。

Dim c As Range
Set c = Range("A1, B2, C3")
c.Select

データの範囲を取得

Range.CurrentRegion を指定すると、指定したセルを囲むデータがある範囲を取得できます。値が入っているセルが続く限り、セルの範囲が広がります。

Dim c As Range
Set c = Range("B2").CurrentRegion
Set c = Range("B6").CurrentRegion
Set c = Range("B10").CurrentRegion
c.Select

セル「B2」、「B6」、「B10」で CurrentRegion を呼ぶと次の範囲のセルを取得できます。

1

特定のセルを取得

Range.SpecialCells の引数に条件を指定すると、条件に一致する全てのセルを取得できます。

Range でセルの範囲を指定すると、その範囲内で条件に一致する全てのセルを取得できます。

条件にはつぎのものがあります。

定数名 説明
xlCellTypeAllFormatConditions-4172条件付き書式が設定されているセル
xlCellTypeAllValidation-4174入力規制が設定が含まれているセル
xlCellTypeBlanks4空のセル
xlCellTypeComments-4144コメントが含まれているセル
xlCellTypeConstants2定数が入力されているセル
xlCellTypeFormulas-4123数式が入力されているセル
xlCellTypeLastCell11セル範囲内の最後のセル
xlCellTypeSameFormatConditions-4173同じ条件付き書式が設定されているセル
xlCellTypeSameValidation-4175同じ入力規制が設定が含まれているセル
xlCellTypeVisible12非表示になっていないセル

xlCellTypeConstants か xlCellTypeFormulas を指定したときは、第二引数に次の値を組み合わせて指定できます。

定数名 説明
xlErrors16エラー値
xlLogical4論理値
xlNumbers1数値
xlTextValues2文字
Dim c As Range
Set c = ActiveCell.SpecialCells(xlCellTypeComments) ' コメントが設定されている全てのセルを取得
Set c = Range("A1:C3").SpecialCells(xlCellTypeComments) ' 「A1」~「C3」の範囲で、コメントが設定されている全てのセルを取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues) ' 文字が入っている全てのセルを取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues Or xlNumbers) ' 文字と数値が入っている全てのセルを取得
c.Select

SpecialCells で該当するセルが見つからないときは、エラーが発生します。

使用されている範囲を取得

Sheets.UsedRange を指定すると、指定したシートで使用されているセルの最大範囲を取得できます。最大範囲とはシートで使用されている一番上、下、左、右のセルの範囲です。

Dim c As Range
Set c = ActiveSheet.UsedRange ' 使用されている
c.Select
2

全てのセルを取得

全てのセルを取得するには Cells と指定します。

Dim c As Range
Set c = Cells ' 全てのセル
c.Select

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

Range とコードに書くと、アクティブなシートのセルを取得します。これは ActiveSheet.Range の ActiveSheet が省略されています。

' どちらも同じコード
Dim c As Range
Set c = Range("A1")
Set c = ActiveSheet.Range("A1")

シートを指定するには Sheets の引数にシート名またはインデックスを指定します。

1

Sheet1 のシートを指定するには、Sheets("Sheet1") か Sheets(1) と書きます。

Dim c As Range
' Sheet1 のセル「A1」を取得
Set c = Sheets("Sheet1").Range("A1")
Set c = Sheets(1).Range("A1")

' Sheet2 のセル「A1」を取得
Set c = Sheets("Sheet2").Range("A1")
Set c = Sheets(2).Range("A1")

関連ページ