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

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
Set c = Range("C2").Previous
Debug.Print(c.Value)
8

次のセルを取得

指定したセルの次のセルを取得するにはRange.Nextを入力します。

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


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

最終セルを取得

指定したセルの終端を取得するには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」を取得します。

3

オフセット位置を取得

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

セル「B2」から行「1」、列「0」移動したセルを取得するにはRange.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
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」を取得するにはRange("A1, B2")を入力します。


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

またはUnion(Range("A1"), Range("B2"))を入力します。

Union を使用すると、取得したセルと別のセルを組み合わせた範囲を取得できます。


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

行と列の数を指定して取得

セル「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:D3").Resize(RowSize:=1)    ' 行数のみ変更、列数は変わらない (B2:D2)
Set c = Range("B2:D3").Resize(ColumnSize:=1) ' 列数のみ変更、行数は変わらない (B2:B3)
c.Select

データの範囲を取得

指定したセルを囲むデータがある範囲を取得するにはRange.CurrentRegionを入力します。

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


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

セル「B2」、「B6」、「B10」で実行すると、次の範囲が取得されます。

1

特定のセルを取得

条件に一致するセルを取得するにはRange.SpecialCells(条件)のように入力します。

1 つのセルに対して指定すると、シート全体で条件に一致するセルを取得します。

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

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

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

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

定数名 説明
xlErrors16エラー値
xlLogical4論理値
xlNumbers1数値
xlTextValues2文字

Dim c As Range
' コメントが設定されている全てのセルを取得
Set c = ActiveCell.SpecialCells(xlCellTypeComments)

' 「A1」~「C3」の範囲で、コメントが設定されている全てのセルを取得
Set c = Range("A1:C3").SpecialCells(xlCellTypeComments) 

' 文字が入っている全てのセルを取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues) 

' 文字と数値が入っている全てのセルを取得
Set c = ActiveCell.SpecialCells(xlCellTypeConstants, xlTextValues Or xlNumbers) 

c.Select

条件に一致するセルが見つからないときは「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。

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

使用されているセルの最大範囲を取得するにはUsedRangeを入力します。


Dim c As Range
Set c = UsedRange
c.Select

最大範囲とはシートに入力されている一番上、下、左、右のセルの範囲です。書式設定されているセルも含みます。

2

すべてのセルを取得

すべてのセルを取得するにはCellsを入力します。


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

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

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

Sheet1 を指定するにはWorksheets("Sheet1")またはWorksheets(1)を入力します。

sheet1

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 = "アクティブ"
  • 目次
    • セルを取得する
    • セルの範囲を取得する
    • 指定したシートのセルを取得する