Microsoft Excel VBA - VBAでセルおよびセル範囲を選択する方法

◆概要

このページは、Excel VBAでセルおよびセル範囲を選択する方法について記載しています。

この資料の例では、次の表に示した Visual Basic のメソッドを使用しています。

メソッド 引数
Activate なし
   
Cells rowIndex,columnIndex
Application.Goto reference,scroll
Offset rowOffset,columnOffset
Range cess1
  cell1.cell2
Resize rowSize,columnSize
Select なし
   
Sheets index(または sheetName)
Workbooks index(または bookName)
End direction
CurrentRegion なし

 この資料の例では、次の表のプロパティを使用しています。

プロパティ 用途
ActiveSheet アクティブ シートを指定します。
ActiveWorkbook アクティブ ワークブックを指定します。
Columns.Count 指定された項目の列数をカウントします。
Rows.Count 指定された項目の行数をカウントします。
Selection 現在選択されている範囲を参照します。
▼ページトップへ

目次
1.アクティブ ワークシート上のセルの選択方法
2.同じブック内の別のワークシート上のセルの選択方法
3.別のブックのワークシート上のセルの選択方法
4.アクティブ ワークシート上のセル範囲の選択方法
5.同じブック内の別のワークシート上のセル範囲の選択方法
6.別のブックのワークシート上のセル範囲の選択方法
7.アクティブ ワークシート上の名前の範囲の選択方法
8.同じブック内の別のワークシート上の名前の範囲の選択方法
9.別のブックのワークシート上の名前の範囲の選択方法
10.アクティブ セルから相対位置にあるセルを選択する方法
11.別の (非アクティブな) セル相対にセルを選択する方法
12.指定した範囲からのオフセットでセル範囲を選択する方法
13.指定した範囲を選択し、選択範囲を変更する方法
14.指定した範囲を選択し、オフセットで選択範囲を変更する方法
15.2 つ以上の指定した範囲を選択する方法
16.2 つ以上の指定した範囲の共有範囲 (重複範囲) の選択方法
17.連続してデータが存在する列の最後のセルを選択する方法
18.連続してデータが存在する列の下の空白セルを選択する方法
19.列内で連続してデータが存在する範囲全体を選択する方法
20.列内でデータが存在する範囲全体を選択する方法
21.セルの四角形の範囲の選択方法
22.可変長の隣接しない複数の列の選択方法
マクロ例についての注意事項

◆1.アクティブ ワークシート上のセルの選択方法
 アクティブシート上のセルD5を選択するには、次の例のいずれかを使用します。

ActiveSheet.Cells(5, 4).Select
または、
ActiveSheet.Range("D5").Select

▼ページトップへ

◆2.同じブック内の別のワークシート上のセルの選択方法
同じブック内の別のワークシート上のセルE6を選択するには、次のいずれかを使用します。

Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
または、
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
または、ワークシートをアクティブにし、上記の方法 1 を使用してセルを選択します。
Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select
▼ページトップへ

3.別のブックのワークシート上のセルの選択方法
別のブックにあるワークシート上のセルF7を選択するには、次の例のいずれかを使用します。

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
または、
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")
または、ワークシートをアクティブにし、上記の方法 1 を使用してセルを選択します。
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select
▼ページトップへ

4.アクティブ ワークシート上のセル範囲の選択方法
アクティブ ワークシート上のセル範囲 C2:D10 を選択するには、次の例のいずれかを使用します。

ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
または、
ActiveSheet.Range("C2:D10").Select
または、
ActiveSheet.Range("C2", "D10").Select
▼ページトップへ

5.同じブック内の別のワークシート上のセル範囲の選択方法
同じブック内の別のワークシート上のセル範囲D3:E11を選択するには、次のいずれかを使用します。

Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")
または、ワークシートをアクティブにし、セル範囲を選択するために上記の方法 4 を使用します。
Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select
▼ページトップへ

6.別のブックのワークシート上のセル範囲の選択方法
別のブックのワークシート上のセル範囲E4:F12を選択するには、次の例のいずれかを使用します。

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")
Application.Goto _
      Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")
または、ワークシートをアクティブにし、セル範囲を選択するために上記の方法 4 を使用します。
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
   ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select
▼ページトップへ

◆7.アクティブ ワークシート上の名前の範囲の選択方法
アクティブ ワークシート上の名前の範囲 "Test" を選択するには、次の例のいずれかを使用します。

Range("Test").Select
Application.Goto "Test"
▼ページトップへ

◆8.同じブック内の別のワークシート上の名前の範囲の選択方法
同じブック内の別のワークシート上の名前の範囲"Test"を選択するには、次の例を使用します。

Application.Goto Sheets("Sheet1").Range("Test")
または、ワークシートをアクティブにし、上記の方法 7 を使用して名前の範囲を選択します。
Sheets("Sheet1").Activate
Range("Test").Select
▼ページトップへ

◆9.別のブックのワークシート上の名前の範囲の選択方法
別のブックのワークシート上の名前の範囲"Test"を選択するには、次の例を使用します。

Application.Goto _
   Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")
または、ワークシートをアクティブにし、上記の方法 7 を使用して名前の範囲を選択します。
Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select
▼ページトップへ

◆10.アクティブ セルから相対位置にあるセルを選択する方法
アクティブ セルの 5 行下、4 列左のセルを選択するには、次の例を使用します。

ActiveCell.Offset(5, -4).Select
アクティブ セルの 2 行上、3 列右のセルを選択するには、次の例を使用します。
ActiveCell.Offset(-2, 3).Select

注 : "ワークシートの外" のセルを選択すると、エラーが発生します。上に示されている最初の例では、アクティブ セルが "A" から "D" のいずれかの列にある場合、左に 4 列移動すると無効なセル位置となるため、エラーを返します。
▼ページトップへ

◆11.別の (非アクティブな) セル相対にセルを選択する方法
セルの C7 の 5 行下、4 列右のセルを選択するには、次の例のいずれかを使用します。

ActiveSheet.Cells(7, 3).Offset(5, 4).Select
ActiveSheet.Range("C7").Offset(5, 4).Select
▼ページトップへ

◆12.指定した範囲からのオフセットでセル範囲を選択する方法
名前の範囲"Test" と範囲の大きさが同じで、4 行下、3 列右の位置に移動したセル範囲を選択するには、次の例を使用します。

ActiveSheet.Range("Test").Offset(4, 3).Select

Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select
▼ページトップへ

◆13.指定した範囲を選択し、選択範囲を変更する方法
名前の範囲 "Database" を選択し、選択範囲を 5 行拡張するには、次の例を使用します。

Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
   Selection.Columns.Count).Select
▼ページトップへ

◆14.指定した範囲を選択し、オフセットで選択範囲を変更する方法
名前の範囲 "Database" から 4 行下、3 列右のセル範囲を選択し、選択範囲を名前の範囲より 2 行、1 列拡張するには、次の例を使用します。

Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, _
   Selection.Columns.Count + 1).Select
▼ページトップへ

◆15.2 つ以上の指定した範囲を選択する方法
2 つの名前の範囲 "Test" と "Sample" の両方を選択するには、次の例を使用します。

Application.Union(Range("Test"), Range("Sample")).Select

この例を実行するには、2 つのセル範囲が同じワークシート上に存在する必要があります。Union メソッドはシートを越えて使用することはできません。たとえば、

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))
は、実行できます。しかし、
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))
はエラー メッセージを返します。
実行時エラー'1004'
'Union' メソッドは失敗しました。'_Application' オブジェクト 
▼ページトップへ

◆16.2 つ以上の指定した範囲の共有範囲 (重複範囲) の選択方法
2 つの名前の範囲 "Test" と Sample" の共有範囲を選択するには、次の例を使用します。

Application.Intersect(Range("Test"), Range("Sample2")).Select

この例を実行するには、2 つの範囲が同じワークシート上に存在する必要があります。

この資料の例 17 から 21 までは、次のサンプル データを参照しています。それぞれの例は、サンプル データのセル範囲が選択されることを示しています。

SampleA


▼ページトップへ

◆17.連続してデータが存在する列の最後のセルを選択する方法
連続してデータが存在する列の最後のセルを選択するには、次の例を使用します。

ActiveSheet.Range("a1").End(xlDown).Select
このコードをサンプルの表で使用すると、セル A4 が選択されます。
▼ページトップへ

◆18.連続してデータが存在する列の下の空白セルを選択する方法
連続してデータが存在する列の下の空白セルを選択するには、次の例を使用します。

ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select
このコードをサンプルの表で使用すると、セル A5 が選択されます。

 ▼ページトップへ
 

◆19.列内で連続してデータが存在する範囲全体を選択する方法
列内で連続してデータが存在する範囲全体を選択するには、次の例のいずれかを使用します。

ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
または、
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
      End(xlDown).Address).Select
このコードをサンプルの表で使用すると、セル A1 から A4 が選択されます。
▼ページトップへ

◆20.列内でデータが存在する範囲全体を選択する方法
列内でデータが存在する範囲全体を選択するには、次の例のいずれかを使用します。

ActiveSheet.Range("a1", ActiveSheet.Range("a65536").End(xlUp)).Select
または、
ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536"). _
   End(xlUp).Address).Select
このコードをサンプルの表で使用すると、セル A1 から A6 が選択されます。
▼ページトップへ

◆21.セルの四角形の範囲の選択方法
複数のセルを囲む四角形の範囲を選択するには、CurrentRegion メソッドを使用します。CurrentRegion メソッドは空白行と空白列で囲まれたセル範囲を選択します。次の例は、CurrentRegion メソッドの使用方法です。

ActiveSheet.Range("a1").CurrentRegion.Select
このコードはセル A1 から C4 までを選択します。同じセル範囲を選択する他のコード例を以下に示します。
ActiveSheet.Range("a1", _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
または、
ActiveSheet.Range("a1:" & _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select

場合によっては、セル A1 から C6 までを選択できますが、この例では 5 行目に空白行があるので、CurrentRegion メソッドでは選択できません。次の例ではすべてのセルを選択します。

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
または、
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & _
   ActiveSheet.Cells(lastRow, lastCol).Address).Select
▼ページトップへ

◆22.可変長の隣接しない複数の列の選択方法
可変長の隣接しない複数の列を選択するには、次のサンプルの表とマクロの例を使用します。

Sample2

StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a, b).Select

このコードをサンプルの表で使用すると、セル範囲 A1:A3 と C1:C6 が選択されます。

▼ページトップへ

◆マクロ例についての注意事項

  • シート名を指定しない場合はアクティブなシートを意味するので、ActiveSheet プロパティは通常省略できます。たとえば、次の指定の代わりに、
    ActiveSheet.Range("D5").Select
    次のように指定できます。
    Range("D5").Select
  • ActiveWorkbook プロパティも、通常省略できます。ブック名を指定しない限り、アクティブ ブックが指定されます。
  • Application.Goto メソッドを使用し、Range メソッドで 2 つの Cells メソッドを使用する場合、指定した範囲が別の (非アクティブの) ワークシートに存在するときは、Sheets オブジェクトを常に含める必要があります。次に例を示します。
    Application.Goto Sheets("Sheet1").Range( _
          Sheets("Sheet1").Range(Sheets("Sheet1").Cells(2, 3), _
          Sheets("Sheet1").Cells(4, 5)))
    
  • 引用符で囲まれた項目 (たとえば、名前の範囲 "Test") には文字列型の変数も使用できます。たとえば、次の指定の代わりに、
    ActiveWorkbook.Sheets("Sheet1").Activate
    次の指定を使用できます。
    ActiveWorkbook.Sheets(myVar).Activate
    ここで、myVar の値は "Sheet1" です。
参考
データの最終行や最終列を取得する方法

▼ページトップへ