シートを指定するVBA

前回、セルを指定するVBAの記事を書きました。
こちら
セルを指定するRangeの前には本来シートの指定があるはずで、シートの指定の前にはブックの指定があるはずなのです。シートの指定をしないでセルを指定すれば現在アクティブになっているブックの現在アクティブになっているシートを対象としてセルを選択するのでシートを一つしか使わないケースであればさほど問題にはならないかもしれません。しかし、多くのVBAではシートの指定が必要ですので、シートの指定をするVBAについても調べたので解説します。

Sheets

Sheetsはブックに格納されているシートすべてを指します。
シートは実はワークシートだけではなく、グラフ1枚だけのグラフシートや、VBA以前のマクロであるExcel4.0マクロ用シート、初期のマクロ用ダイアログボックスを作成するシートなどがあります。シート見出しを右クリックし挿入をクリックすると挿入できるものが一覧で表示されます。

これらはすべてシートでSheetsはそのブック内のシートの集まりを指しています。
Sheets.Countですべてのシート枚数が求まります。
Sheets(“売上”)で売上という名前のシートを指定します。
Sheets(1)で一番左のシートを指します。これはSheets.Item(1)のItemを略しています。
Sheets(“売上”).Range(“A1”)で売上シートのセルA1を指定します。
Sheets(“売上”).Range(“A1”).Copyで売上シートのセルA1をコピーします。
Sheets(“売上”).Range(“A1:C1”).Copy Sheets(“販売”).Range(“J1”)で売上シートのセルA1からC1までを販売シートのセルJ1にコピーします。
シートを指定したSelectによる選択をするときは注意が必要で、いきなりSheets(“売上”).Range(“A1”).Selectで選択するとエラーになります。売上シートのあるセルを選択するには売上シートをあらかじめ選択しておく必要があります。最初にSheets(“売上”).Selectの後にSheets(“売上”).Range(“A1”).Select、もしくはRange(“A1”).Selectを記述します。Sheets(“売上”).Range(“A1”).Selectと記述したほうがエラーは出やすくなりますが間違いは防げます。
指定したシートがグラフシートではセルがありませんので、セル指定ができません。
また、こちらの記事の通り、Sheetsはインテリセンスが利きません。Worksheet型の変数に入れることによってインテリセンスが利くようになります。

WorkSheets

WorkSheetsはブックに格納されているワークシート全てを指します。使い方や注意点はSheetsと変わりません。
Sheetsと違うのはグラフシートなどは含まれません。あくまでワークシートのみです。

Charts

グラフシートを表します。
Charts.Countでグラフシートの数を求めるなど、Sheetsと同じような動作をします。ActiveSheet
ActiveSheetは、今見えている、アクティブセルが表示されている1枚のシートを指定します。

Count

CountはSheetsやWorksheetsに対しての枚数を取得します。ループの回数に使えます。
次のVBAはすべてのワークシートのセルA1の値をメッセージボックスで連続で表示します。

Sub セルA1連続表示1
Dim i As Integer
For i=1 To Worksheets.Count 
  MsgBox WorkSheets(i).Range("A1").Value
Next
End Sub

以下のVBAでも同じ動作をします。

Sub セルA1連続表示2
Dim sh As WorkSheets
For Each sh In Worksheets 
  MsgBox sh.Range("A1").Value
Next
End Sub

Name

Nameは1枚のシートについて、名前を取得します。

Sub シート名
Dim sh As WorkSheets
For Each sh In Worksheets 
  MsgBox sh.Name
Next
End Sub

Add

Addは新しいシートを追加します。
Worksheets.Addで追加できます。
Worksheets.Add Count:=4で4枚一度に追加できます。
Worksheets.Add After:=WorkSheets(Worksheets.Count)でシートの一番右側にシートを追加します。
Worksheets.Add After:=WorkSheets(Worksheets.Count)
Worksheets.Add.Name=”売上”で売上という名前のワークシートを追加します。
Sheets.Add Type:=XlChartでグラフシートを追加しますが、Worksheets.Add Type:=XlChartではグラフシートはワークシートではないのでエラーになります。
Charts.Addでもグラフシートを挿入することができます。

Delete

Deleteはシートを削除します。

※きちんと削除するシートを指定します。指定しないとすべてのシートが削除されます。
Worksheets.Deleteはすべてのワークシートを削除します。このときワークシート以外の種類のシートが1枚でもあった場合、ワークシートをすべて削除します。
Sheets.Deleteはすべてのワークシートを削除する動作をしようとしますが、1枚もシートがないブックを作成することができないので実行されません。
WorkSheets(“売上”).Deleteは売上シートを削除します。

次のVBAはワークシートを1枚ずつセルA1が未使用で使用している最後のセルがA1かどうかデータの入っていないシートをチェックしていって該当すれば未使用ということで削除します。

Sub 未使用シートの削除()
Dim sh As Worksheet
For Each sh In Worksheets
  If sh.Range("A1").Formula = "" And _
    sh.Cells.SpecialCells(xlCellTypeLastCell).Address = "$A$1" Then
    sh.Delete
  End If
Next
End Sub

コメント

タイトルとURLをコピーしました