今回はExcelのシートの「選択、取得、追加、削除」についてご説明します。
一般的に「シート」というと、Sheet1とかSheet2などを思い浮かべるかと思いますが、実際にはSheet1やSheet2は「ワークシート(Worksheet)」と言います。
「シート」と言っても普通に通じるので問題ないと思いますが、厳密には以下の各シートの総称をシートと言います。
- ワークシート
- グラフシート
- モジュールシート
- ダイアログシート
- マクロシート
今回は1個目の「ワークシート」についてご説明します。
ワークシートを扱うには、コレクションという概念についても把握しておく必要がありますので、簡単にコレクションについても記載します。
シートのコピーや移動、表示/非表示、シートのループ方法については「シートのコピー、移動、表示/非表示、ループ」をご覧下さい。
1.SheetsコレクションとWorksheetsコレクション
冒頭で説明した通り、シートはワークシート等のいくつかのシートの総称です。
ワークシートを指定する場合、SheetsコレクションとWorksheetsコレクションどちらを使用しても問題ありません。
ですが、ワークシート以外のシートをWorksheetsコレクションで指定するとエラーとなります。
コレクションとは?
突然出てきたコレクションですが、コレクションというのは、オブジェクトの集まりのことです。
たとえば、「WorkSheets」コレクションというのは複数形ですよね?
「WorkSheet」という1個1個のオブジェクトの集まりのことです。
今から操作しようとしているファイルにSheet1〜3まで3つのシートがあるとしたら、Sheet1、2、3はWorkSheetsコレクションの中にあり、このコレクションから操作したいシートをシート名や番号で指定してあげる事になります。
2.シートの選択と取得
ワークシートを選択する方法はいくつかあります。
シートを選択する場合は、「Select」もしくは「Activate」メソッドを使用します。
SelectとActivateの違いを簡単に説明すると、Selectは複数選択した場合に選択されたオブジェクトすべてを対象として、Activateはアクティブなっている単一のオブジェクトを対象とします。
Rangeで説明すると、以下図の白色(B2)がActivate、薄青の範囲はSelectです。
2-1.アクティブシートを操作する
シートをアクティブにする
指定したシートをアクティブにする場合は、「Worksheets(シート名).Activate」でアクティブにできます。
Sub Sample1()
Worksheets("Sheet1").Activate
End Sub
アクティブシートを取得する
アクティブシートを取得する場合は、「ActiveSheet」で取得できます。
Sub Sample2()
Dim WS As Worksheet 'ワークシート型で宣言
Set WS = ActiveSheet 'シートを格納するときは「Set」を使う
End Sub
2-2.選択しているシートを操作する
シートを選択する
シートを選択するには、「Worksheets(シート名).Select」で選択できます。
非表示のシートをSelectしようとするとエラーになります。(※Activateはエラーになりません。)
Sub Sample3()
Worksheets("Sheet1").Select
End Sub
選択しているシートを取得する
選択しているシートを取得する場合は、「SelectedSheets」プロパティを使用します。
「SelectedSheets(インデックス番号)」で選択しているシートを指定する事ができます。
単一のシートであれば「ActiveWindow.SelectedSheets(1)」となり、複数選択している場合はインデックスを変更する事で変更できます。
「ActiveWindow」を記載しているのは、Windowオブジェクトのプロパティのためです。
Sub Sample4()
Dim WS As Worksheet
Set WS = ActiveWindow.SelectedSheets(1)
End Sub
2-3.シート名でシートを操作する
シート名でシートを選択する
「Worksheets(シート名).Select」でシートを選択することができます。
Sub Sample5()
Worksheets("Sheet1").Select
End Sub
シート名でシートを取得する
「Worksheets(シート名)」でシートを取得することができます。
Sub Sample6()
Dim WS As Worksheet
Set WS = Worksheets("Sheet1")
End Sub
2-4.インデックス番号でシートを操作する
シートを操作する場合に、ループと併用する場合などを考えるとこのインデックスが一番便利かと思います。
インデックスは「””」では囲わないのでご注意ください。
インデックス番号でシートを選択する
「Worksheets(インデックス番号).Select」で選択することができます。
Sub Sample7()
Worksheets(1).Select
End Sub
インデックス番号でシートを取得する
「Worksheets(インデックス番号)」で取得することができます。
Sub Sample8()
Dim WS As Worksheet
Set WS = Worksheets(1)
End Sub
3.シート名の取得と変更
3-1.シート名を取得する
シート名を取得する場合は、Nameプロパティを使用します。
Sub Sample9()
Dim WS As Worksheet
Set WS = Worksheets(1)
MsgBox WS.Name
End Sub
3-2.シート名を変更する
シート名の変更も同様に、Nameプロパティを使用します。
注意点があり、すでに使用されているシート名に変更しようとした場合にはエラーになります。
頻繁にシートの追加/削除やシート名の変更をする場合は、シート名が存在するか確認するコードを組み込むことをおすすめします。
Sub Sample10()
Dim WS As Worksheet
Set WS = Worksheets(1)
WS.Name = "テスト"
MsgBox WS.Name
End Sub
4.シートの挿入と削除
4-1.シートの挿入
シートの挿入には「Add」メソッドを使用します。
構文は「Worksheets.Add(Before, After, Count, Type)」です。
Before、Aftar、Countは挿入する位置を指定します。
Typeはワークシートやグラフシートなどを指定できます。
単純にシートを追加する
Sub Sample11()
Worksheets.Add
End Sub
指定したシートの前に追加するコード
Sub Sample12()
Worksheets.Add before:=Worksheets("Sheet1")
End Sub
指定したシートの後ろに追加するコード
Sub Sample13()
Worksheets.Add after:=Worksheets("Sheet1")
End Sub
シートの一番最後に追加するコード
これが一番使用するかもしれません。
「Worksheets.Count」でシート数を取得できますので、下記コードはシート数を数値で指定した事になり、1番大きい数字のシートの後ろに追加という事になります。
Sub Sample14()
Worksheets.Add after:=Worksheets(Worksheets.Count)
End Sub
シート追加と同時に名前を変更する方法
シートを追加して、シート名を変更する場合に追加と同時にシート名を変更します。
これはシートを追加した際に、追加したシートがアクティブになる性質を利用します。
Sub Sample15()
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "新しいシート"
End Sub
4-2.シートの削除
シートの削除には「Delete」メソッドを使用します。
もしFor~Nextループで削除する場合は、末尾のシートから前に向かって「Step-1」で削除します。
Sub Sample16()
Worksheets("Sheet1").Delete
End Sub
シートを削除する場合は「削除してもいいか」、確認メッセージが表示されます。
確認メッセージが表示されると、VBAが途中で止まってしまうため、回避するためには「Application.DisplayAlerts = False」を使用します。
Sub Sample17()
Application.DisplayAlerts = False
Worksheets("Sheet1").Delete
Application.DisplayAlerts = True
End Sub
5.まとめ
今回はシートの基本操作を中心に、説明しました。
VBAで、それなりのツールを作成する場合には必ず必要となります。
シートの表示、非表示やコピー、移動やループ方法などについては別の記事でご説明したいと思います。