前回、セルを指定する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
コメント