VBAシート – 究極のガイド
In this Article
これは、VBAでExcelシート/ワークシートを操作するための究極のガイドです。 このガイドの下部には、シートを操作するための一般的なコマンドのチートシートが用意されています。
シートとワークシートの比較
VBAを使用してシートを参照するには、2つの方法があります。1つ目は、Sheetsオブジェクトを使用する方法です。
Sheets("Sheet1").Activate
もうひとつは、Worksheetオブジェクトを使う方法です。
Worksheets("Sheet1").Activate
この2つのオブジェクトは、99%同じものです。実際、ネットでVBAのコード例を検索してみると、両方のオブジェクトが使われているのを見ると思います。ここでは、その違いを説明します。
Sheetsコレクションには、ワークシートとグラフ(チャート)シートが含まれています。
したがって、通常のワークシートとグラフシートを含める場合は、「シート」を使用します。グラフシートを除外したい場合は、「ワークシート」を使用します。このガイドの残りの部分では、「シート」と「ワークシート」を同じ意味で使用します。
シートの参照
シートを参照するには、いくつかの異なる方法があります。
- アクティブシート
- シートのタブ名(シート名)
- シートインデックス番号
- シートコード名
アクティブシート
アクティブシートは、現在アクティブになっているシートです。言い換えれば、コードを一時停止してExcelを見たときに表示されているシートのことです。以下のコード例では、アクティブシートの名前をMessageBoxに表示します。
MsgBox ActiveSheet.Name
シート名
シートの参照はタブ名で行うのが最も馴染み深いのではないでしょうか。
Sheets("TabName").Activate
これはExcelのユーザーから見えるシート名です。シートオブジェクトに、引用符で囲まれた文字列として入力します。
シートインデックス番号
シートインデックス番号は、ワークブック内のシートの位置です。1は最初のシートで、2は2番目のシートです。
Sheets(1).Activate
シートインデックス番号 – ワークブック内の最後のシート
ワークブックの最後のシートを参照するには、Sheets.Countを使って最後のインデックス番号を取得し、そのシートをアクティブにします。
Sheets(Sheets.Count).Activate
シートの “コード名”
シートのコード名は、VBAにおけるオブジェクト名です。
CodeName.Activate
他のワークブックにあるシートの参照
他のワークブックにあるシートを参照することも簡単です。これを行うには、Workbooksオブジェクトを使用する必要があります。
Workbooks("VBA_Examples.xlsm").Worksheets("Sheet1").Activate
重要: ワークブックは、そのシートを参照する前に開いておく必要があります。
シートのアクティブ化と選択
別の記事で、シートのアクティブ化と選択に関するすべてを説明します。簡単に説明すると、こうです。 シートをアクティブにすると、それがアクティブシートになります。このシートは、Excelのプログラムを見たときに表示されるシートです。一度にアクティブにできるのは1つのシートだけです。
シートをアクティブ化する
Sheets("Sheet1").Activate
シートを選択すると、そのシートもActiveSheetになります。ただし、一度に複数のシートを選択することができます。複数のシートを同時に選択した場合、「先頭」のシートがActiveSheetになります。なお、選択されたシート内でActiveSheetを切り替えることはできます。
シートを選択する
Sheets("Sheet1").Select
複数のシートを選択する
配列を使って、複数のシートを一度に選択することができます。
Worksheets(Array("Sheet2", "Sheet3")).Select
ワークシート変数
ワークシートをオブジェクト変数に代入すると、その変数名でワークシートを参照することができます。これにより、入力の手間を省くことができ、コードを読みやすくすることができます。また、変数を使いたい理由は他にもたくさんあります。 ワークシート変数を宣言するには、以下のようにします。
Dim ws as worksheet
ワークシートを変数に代入する。
Set ws = Sheets("Sheet1")
これで、コード内でワークシート変数を参照できるようになりました。
ws.Activate
ワークブックの全シートをループする
ワークシート変数は、ワークブック内のすべてのワークシートをループする場合に便利です。これを行う最も簡単な方法は以下のとおりです。
Dim ws as Worksheet
For Each ws in Worksheets
MsgBox ws.name
Next ws
このコードは、ワークブック内のすべてのワークシートをループし、各ワークシートの名前をメッセージボックスに表示します。ワークブック内のすべてのシートをループすることは、一度に複数のワークシートをロック/ロック解除、または非表示/非表示にする場合に非常に便利です。
ワークシートの保護
ワークブックの保護
ワークブックの保護は、ワークシートの追加、削除、移動、非表示などの構造的な変更からワークブックをロックします。
VBAを使用してワークブックの保護を有効にすることができます。
ActiveWorkbook.Protect Password:="Password"
また、ワークブックの保護を無効にすることもできます。
ActiveWorkbook.UnProtect Password:="Password"
注:Password引数を省略すれば、パスワードなしで保護/保護解除することができます。
ActiveWorkbook.Protect
ワークシートの保護
ワークシートレベルの保護は、個々のワークシートの変更を防止します。
ワークシートを保護する
Worksheets("Sheet1").Protect "Password"
ワークシートの保護を解除する
Worksheets("Sheet1").Unprotect "Password"
ワークシートの保護には様々なオプションがあります。(書式の変更を許可する、ユーザーが行を挿入できるようにする、など。)
ワークシートの保護については、こちらで詳しく説明しています。
ワークシートの可視性
ワークシートを非表示にできることは、すでにご存知かもしれません。
ワークシートの可視性には、実際には3つの設定があります。ワークシートの表示設定は、「表示」「非表示」「再表示できない非表示(VeryHidden)」の3つです。非表示のシートは、通常のExcelユーザであれば、ワークシートタブ領域(上図)で右クリックすることにより、非表示を解除することができます。 VeryHiddenシートは、VBAコードまたはVBAエディタからのみ非表示にすることができます。 ワークシートの非表示/非表示を切り替えるには、以下のコード例を使用してください。
ワークシートの非表示を解除する
Worksheets("Sheet1").Visible = xlSheetVisible
ワークシートを非表示にする
Worksheets("Sheet1").visible = xlSheetHidden
ワークシートを再表示できない非表示にする
Worksheets("Sheet1").Visible = xlSheetVeryHidden
ワークシートレベルのイベント
イベントは、「イベントプロシージャ」を実行させることができるトリガーです。たとえば、ワークシート上のセルが変更されるたびに、またはワークシートがアクティブになるたびに、コードを実行させることができます。 ワークシートイベントプロシージャは、ワークシートモジュールに配置する必要があります。
ワークシートイベントは数多く存在します。完全なリストを見るには、ワークシートモジュールに行き、最初のドロップダウンから “Worksheet “を選択します。次に、2番目のドロップダウンからイベントプロシージャを選択し、モジュールに挿入します。
Worksheet_Activateイベント
ワークシートが開かれるたびにWorksheet_Activateイベントが実行されます。
Private Sub Worksheet_Activate()
Range("A1").Select
End Sub
このコードは、ワークシートを開くたびにセルA1を選択(表示領域をワークシートの左上にリセット)します。
Worksheet_Changeイベント
Worksheet_Changeイベントは、ワークシート上でセルの値が変更されるたびに実行されます。詳しくは、Worksheet_Changeイベントに関するチュートリアルをご覧ください。
ワークシート・チートシート
VBAでシートを操作するための一般的なコード例を含むチートシートが以下にあります。 [テーブル id=11 /]