■ ワークシートの参照をマスターしよう!
前回までは、ワークシート上のセルを操作する様々な手法について解説しました。今回は、ワークシートそのものを操作する、様々な手法について解説していきたいと思います。ワークシートを操作する方法を学ぶことで、VBAから自由にワークシートを追加したり、名前を変更したり、保護をかけたりすることができるようになります。
ワークシートを参照する
ワークシートを参照することで、処理対象となるシートを操作することが可能になります。
■Worksheetsプロパティを使用してワークシートを参照する
Worksheetsプロパティを使用すると、シート名やインデックス番号を使って単一のワークシートを参照することができます。
[書式]
オブジェクト.Worksheets(シート名)
オブジェクトには、ApplicationオブジェクトまたはWorkbookオブジェクトを指定します。省略すると、作業中のブックが対象となります。
シート名には、ワークシートの名前またはインデックス番号を指定します。インデックス番号は、シート見出しの左から順に「1,2,3…」の順に自動的に割り当てられます。インデックス番号は、シートの追加や削除、移動によって番号が変わります。その場合も、常に左からの順番になります。
(例)
Worksheets("Sheet1").Select
Debug.Print Worksheets(3).Name
上の例では、アクティブブックの「Sheet1」シートを選択します。下の例では、シート見出しの左から3番目のワークシートの名前をイミディエイトウィンドウに出力します。シート見出しが「Sheet1、Sheet2、Sheet3」となっている場合、「Sheet3」の文字列を出力します。 |
■Activesheetプロパティを使用してワークシートを参照する
Activesheetプロパティを使用すると、現在アクティブな(操作の対象となっている)ワークシートを参照することができます。
[書式]
オブジェクト.Activesheet
オブジェクトには、ApplicationオブジェクトまたはWindowオブジェクトまたはWorkbookオブジェクトを指定します。省略すると、作業中のブックが対象となります。
■SelectedSheetsプロパティを使用してワークシートを参照する
SelectedSheetsプロパティを使用すると、現在選択されているすべてのワークシートを参照することができます。Activesheetプロパティとの違いは、複数のシートを選択した状態で、Activesheetプロパティがアクティブなシートのみを参照するのに対し、SelectedSheetsプロパティは選択したすべてのシートを参照します。
[書式]
オブジェクト.SelectedSheets
オブジェクトには、Windowオブジェクトを指定します。Workbookオブジェクトを指定することはできません。
(例)
Debug.Print ActiveSheet.Name
Debug.Print ActiveWindow.SelectedSheets.Count
シート見出しが次のような状態になっているとき、
上の例ではアクティブシートの名前である「Sheet1」の文字列を、下の例では選択されているシートの数「3」を、それぞれイミディエイトウィンドウに出力します。 |
■Previousプロパティ、Nextプロパティを使用してワークシートを参照する
Previousプロパティを使用すると指定したシートの左側のシートを、Nextプロパティを使用すると右側を、それぞれ参照することができます。
[書式]
オブジェクト.Previous
オブジェクト.Next
オブジェクトには、WorksheetオブジェクトまたはChartオブジェクトを指定します。
(注意)シート見出しの一番左にあるシートでPreviousプロパティを使って左側のシートを参照したり、一番右にあるシートでNextプロパティを使って右側のシートを参照すると、参照するシートが存在しないためエラーが発生します。
(例)
Debug.Print ActiveSheet.Previous.Name
Debug.Print ActiveSheet.Next.Name
シート見出しが「Sheet1、Sheet2、Sheet3」となっていて、「Sheet2」シートがアクティブになっている場合、上の例では「Sheet1」の文字列を、下の例では「Sheet3」の文字列を、それぞれイミディエイトウィンドウに出力します。 |
ワークシートを操作する
VBAを使用することで、参照先のワークシートに対して様々な操作を行うことが可能です。
■Selectメソッド、Activateメソッド
Selectメソッドは1つまたは複数のワークシートを選択します。Activateメソッドはワークシートをアクティブ(操作の対象)にします。
[書式]
オブジェクト.Select(置換)
オブジェクトには、WorksheetsコレクションまたはWorksheetオブジェクトを指定します。
置換えには、TrueまたはFalseを指定します。Falseを指定すると現在選択しているシートの選択を解除せずに、指定したシートを選択します。その場合、複数のワークシートが選択されます。省略するとTrueが指定されます。
※ この他にもArray関数を使用すると、複数のワークシートを一度に選択することができます。例えば、「Worksheets(Array("Sheet1", "Sheet2", "Sheet3")).Select」と記述すると、「Sheet1〜Sheet3」シートを一度に選択することができます。
[書式]
オブジェクト.Activate
オブジェクトには、Worksheetオブジェクトを指定します。
※ 複数のシートが選択されている状態で、選択されているシートのいずれかに対してActivateメソッドを実行すると、選択を解除せずに指定したシートをアクティブにします。
(例)
Sub Test()
Sheets("Sheet1").Select
Sheets("Sheet3").Select False
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
Sheets("Sheet2").Activate
End Sub
シート見出しが「Sheet1、Sheet2、Sheet3、Sheet4」となっている場合、このプロシージャを実行すると、最初に「Sheet1」シートを選択します。次に、「Sheet1」シートと「Sheet3」シートの2つを選択します。さらに、「Sheet1〜Sheet3」の3つのシートを選択します。最後に、「Sheet1〜Sheet3」シートを選択した状態で「Sheet2」シートをアクティブにします。 |
※ すべてのシートが選択された状態でアクティブシート以外のシートをアクティブにすると、複数シートの選択が解除されます。
上の例でシート見出しが「Sheet1、Sheet2、Sheet3」の場合、「Sheets("Sheet2").Activate」で「Sheet2」シートはアクティブになりますが、「Sheet1〜Sheet3」シートの選択状態は解除されます。
以上、ワークシートを参照する方法とワークシートの操作の一部について解説しました。
次回も引き続き、VBAからワークシートを操作する様々な手法について解説したいと思います。
|