VBAシート – 究極のガイド

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 5月 11, 2022

これは、VBAでExcelシート/ワークシートを操作するための究極のガイドです。 このガイドの下部には、シートを操作するための一般的なコマンドのチートシートが用意されています。

シートとワークシートの比較

VBAを使用してシートを参照するには、2つの方法があります。1つ目は、Sheetsオブジェクトを使用する方法です。

Sheets("Sheet1").Activate

もうひとつは、Worksheetオブジェクトを使う方法です。

Worksheets("Sheet1").Activate

この2つのオブジェクトは、99%同じものです。実際、ネットでVBAのコード例を検索してみると、両方のオブジェクトが使われているのを見ると思います。ここでは、その違いを説明します。

Sheetsコレクションには、ワークシートとグラフ(チャート)シートが含まれています。

vba sheets worksheets シート ワークシート

したがって、通常のワークシートとグラフシートを含める場合は、「シート」を使用します。グラフシートを除外したい場合は、「ワークシート」を使用します。このガイドの残りの部分では、「シート」と「ワークシート」を同じ意味で使用します。

シートの参照

シートを参照するには、いくつかの異なる方法があります。

  • アクティブシート
  • シートのタブ名(シート名)
  • シートインデックス番号
  • シートコード名

アクティブシート

アクティブシートは、現在アクティブになっているシートです。言い換えれば、コードを一時停止してExcelを見たときに表示されているシートのことです。以下のコード例では、アクティブシートの名前をMessageBoxに表示します。

MsgBox ActiveSheet.Name

シート名

シートの参照はタブ名で行うのが最も馴染み深いのではないでしょうか。

vba sheet tab name

Sheets("TabName").Activate

これはExcelのユーザーから見えるシート名です。シートオブジェクトに、引用符で囲まれた文字列として入力します。

シートインデックス番号

シートインデックス番号は、ワークブック内のシートの位置です。1は最初のシートで、2は2番目のシートです。

vba sheet index position シート 位置

Sheets(1).Activate

シートインデックス番号 – ワークブック内の最後のシート

ワークブックの最後のシートを参照するには、Sheets.Countを使って最後のインデックス番号を取得し、そのシートをアクティブにします。

Sheets(Sheets.Count).Activate

シートの “コード名”

シートのコード名は、VBAにおけるオブジェクト名です。

vba sheet code name シート コード名

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 protect workbook ワークブック 保護

ワークブックの保護は、ワークシートの追加、削除、移動、非表示などの構造的な変更からワークブックをロックします。

VBAを使用してワークブックの保護を有効にすることができます。

ActiveWorkbook.Protect Password:="Password"

また、ワークブックの保護を無効にすることもできます。

ActiveWorkbook.UnProtect Password:="Password"

注:Password引数を省略すれば、パスワードなしで保護/保護解除することができます。

ActiveWorkbook.Protect

ワークシートの保護

ワークシートレベルの保護は、個々のワークシートの変更を防止します。

ワークシートを保護する

Worksheets("Sheet1").Protect "Password"

ワークシートの保護を解除する

Worksheets("Sheet1").Unprotect "Password"

ワークシートの保護には様々なオプションがあります。(書式の変更を許可する、ユーザーが行を挿入できるようにする、など。)

ワークシートの保護については、こちらで詳しく説明しています。

ワークシートの可視性

ワークシートを非表示にできることは、すでにご存知かもしれません。

vba hide sheet ワークシート 非表示

ワークシートの可視性には、実際には3つの設定があります。ワークシートの表示設定は、「表示」「非表示」「再表示できない非表示(VeryHidden)」の3つです。非表示のシートは、通常のExcelユーザであれば、ワークシートタブ領域(上図)で右クリックすることにより、非表示を解除することができます。 VeryHiddenシートは、VBAコードまたはVBAエディタからのみ非表示にすることができます。 ワークシートの非表示/非表示を切り替えるには、以下のコード例を使用してください。

ワークシートの非表示を解除する

Worksheets("Sheet1").Visible = xlSheetVisible

ワークシートを非表示にする

Worksheets("Sheet1").visible = xlSheetHidden

ワークシートを再表示できない非表示にする

Worksheets("Sheet1").Visible = xlSheetVeryHidden

ワークシートレベルのイベント

イベントは、「イベントプロシージャ」を実行させることができるトリガーです。たとえば、ワークシート上のセルが変更されるたびに、またはワークシートがアクティブになるたびに、コードを実行させることができます。 ワークシートイベントプロシージャは、ワークシートモジュールに配置する必要があります。

vba worksheet module ワークシート モジュール イベント

ワークシートイベントは数多く存在します。完全なリストを見るには、ワークシートモジュールに行き、最初のドロップダウンから “Worksheet “を選択します。次に、2番目のドロップダウンからイベントプロシージャを選択し、モジュールに挿入します。

vba worksheet events ワークシート イベント

Worksheet_Activateイベント

ワークシートが開かれるたびにWorksheet_Activateイベントが実行されます。

Private Sub Worksheet_Activate()
  Range("A1").Select
End Sub

このコードは、ワークシートを開くたびにセルA1を選択(表示領域をワークシートの左上にリセット)します。

Worksheet_Changeイベント

Worksheet_Changeイベントは、ワークシート上でセルの値が変更されるたびに実行されます。詳しくは、Worksheet_Changeイベントに関するチュートリアルをご覧ください。

ワークシート・チートシート

VBAでシートを操作するための一般的なコード例を含むチートシートが以下にあります。 [テーブル id=11 /]

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples