■ セルの選択をマスターしよう!
数回にわたってワークシート上のセルを操作するExcel VBAについて解説を行います。
今回はセルを選択する様々な方法について解説していきます。
セルを選択する
Excel VBAにはセル、またはセル範囲を選択する動作を行うためのメソッドが数多く用意されています。これらのメソッドを知ることで、より効率的にワークシートを使用したプログラミングを行うことが可能です。
■Selectメソッド、Activateメソッド
セル、またはセル範囲を選択します。
[書式]
オブジェクト.Select
オブジェクト.Activate
オブジェクトにはRangeオブジェクトを指定します。ワークシートの指定を省略した場合は、アクティブシートのセルを選択します。
(注意)ワークシートを指定してセルの選択を行う場合、あらかじめ対象となるワークシートをアクティブにしておく必要があります。アクティブでないワークシートに対してSelectメソッドやActivateメソッドを実行すると実行時エラーが発生するので注意してください。
例:
Range("A1:C3").Select
Worksheets("Sheet1").Range("A1:C3").Select
Worksheets("Sheet1").Range("A2").Activate
1つめの例では、アクティブシートの「A1〜C3」のセル範囲を選択します。2つ目の例では「Sheet1」シートの「A1〜C3」のセル範囲を選択します。3つ目の例では、「Sheet1」シートの「A2」セルをアクティブにします。2つ目と3つ目の例では、「Sheet1」シートがアクティブになっていない場合、実行時エラーが発生します。 |
※ アクティブセルとは、セル範囲を選択した状態で現在操作の対象となっているセル(色の付いていないセル)を指します。例えば「Range("A1:C3").Select」では、「A1〜C3」のセル範囲を選択しますが、アクティブなセルは「A1」セルです。「Range("A2").Activate」で、アクティブなセルが「A1」セルから「A2」セルに変更されます。
■Gotoメソッド
指定されたセル、またはセル範囲に移動します。
[書式]
Application.Goto セル範囲, スクロール
セル範囲には移動先のセル範囲を指定します。ワークシートを指定してセル範囲を指定した場合、指定したワークシートがアクティブでなくても、アクティブにしてセル範囲を選択します。
スクロールにはTrueまたはFalseを指定します。Trueを指定した場合、移動先のセルが画面の左上端になるようにスクロールして表示します。省略するとFalseになります。Falseの場合、スクロールしません。
例:
Application.Goto Worksheets("Sheet1").Range("A1:C3")
Application.Goto Worksheets("Sheet2").Range("AA1:AC3"), True
上の例では、「Sheet1」シートの「A1〜C3」のセル範囲を選択します。下の例では、「Sheet2」シートの「AA1〜AC3」のセル範囲を選択します。それぞれのシートがアクティブでない場合でも、アクティブにしてセル範囲を選択します。 |
■Resizeプロパティ
現在参照しているセル範囲を、リサイズしたセル範囲の参照を得ることができます。
[書式]
オブジェクト.Resize(行数, 列数)
オブジェクトには、Rangeオブジェクトを指定します。
行数には、新しい範囲の行数を指定します。列数には、新しい範囲の列数を指定します。省略した場合は、現在選択している行数・列数がそのまま適用されます。
例:
Sub Test()
Range("A1:C3").Select
Selection.Resize(4, 4).Select
End Sub
このプロシージャを実行すると、アクティブシートの「A1〜C3」のセル範囲を選択し、行数「4」・列数「4」にリサイズします。リサイズ後の選択されたセル範囲は「A1〜D4」になります。 |
Sub Test()
Range("A1:C3").Select
Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select
End Sub
このプロシージャを実行すると、アクティブシートの「A1〜C3」のセル範囲を選択します。「Selection.Offset(1)」で、参照範囲の左上端セルを1行下に移動し、「Selection.Rows.Count - 1」で選択されている行数「3」を「2」に変更してリサイズします。リサイズ後の選択されたセル範囲は「A2〜C3」になります。 |
※ Resizeプロパティは、指定されたセル範囲の左上端のセルを基準にしてリサイズします。例えば「E10〜G15」のセル範囲を参照している場合、基準となるセルは「E10」になります。リサイズ後のセル範囲は、この「E10」からの行数と列数に変更されます。
■Unionプロパティ
複数のセル範囲を結合します。
[書式]
Apllication.Union(セル範囲1, セル範囲2, …)
セル範囲には、まとめたいセル範囲を「,」で区切って指定します。引数には、最低2つ以上のセル範囲を指定してください。セル範囲が1つの場合、コンパイルエラーが発生します。
例:
Sub Test()
Range("A1:C3").Select
Application.Union(Selection, Range("E1:G3")).Select
End Sub
このプロシージャを実行すると、アクティブシートの「A1〜C3」のセル範囲を選択した後、Unionプロパティで「E1〜G3」のセル範囲を結合して選択します。 |
以上、セルを選択するいろいろな方法について解説しました。
セル範囲を自由に選択することで、さらに操作性の良い、業務用アプリケーションをユーザーに提供することが可能です。今回の解説について、十分理解しておいてください。
次は、セルを操作する様々な方法について詳しく解説を行います。
|