ワークシートの取得
VBA を活用するシチュエーションとして、最も一般的なのは、Excel ワークシートの操作です。
ワークシートを操作するためには、まずワークシートを取得する必要があります。
VBA にはワークシートを取得する方法が複数用意されており、名前を使って指定する方法やインデックスを使って指定する方法、現在アクティブなワークシートを取得する方法などがあります。
このページでは、VBA を使ってワークシートを取得する方法について、具体例を交えて解説します。
ワークシートを取得する方法
名前を指定して取得する
まず最初に、ワークシートのシート名を使ってワークシートを取得する方法を解説します。
名前をもとに取得することができるため、最も直感的でわかりやすい方法です。
Workbook
クラスのSheets
プロパティを使って、ワークシートを取得します。
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
上記の例では、ThisWorkbook
は現在のブックを指し、Sheets
プロパティを使ってワークシートを取得しています。
引数としてシート名を指定することで、その名前のワークシートを取得することができます。
対象のシートが存在しない場合はエラーが出力されます。
インデックスを指定して取得する
次に、ワークシートのインデックスを使ってワークシートを取得する方法を解説します。
インデックスを使って取得する場合も、前述した名前を使って取得する方法と同様に、Workbook
クラスのSheets
プロパティを使ってワークシートを取得します。
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
Sheets
プロパティに対して、シート名の代わりにインデックスを指定することで、そのインデックスのワークシートを取得することができます。
インデックスは 1 から始まるため、上記の例では、ブック内の最初のワークシートを取得しています。
現在アクティブなワークシートを取得する
VBA が実行される際に、アクティブになっている(画面上に表示されている)ワークシートを取得する方法もあります。
ActiveSheet
プロパティを使って、現在アクティブなワークシートを取得することができます。
Dim ws As Worksheet
Set ws = ActiveSheet
前述した 2 つの取得方法では、Workbook
クラスからSheets
プロパティを使ってワークシートを取得していましたが、
ActiveSheet
プロパティはApplication
クラスから直接アクセスすることができます。
そのため、ActiveSheet
と入力するだけで、現在アクティブなワークシートを取得することができます。
ただし、 実行される環境によって対象とするワークシートが変わるため、安易に使うことは避けるべきです。 可能な限り、名前やインデックスを使って取得する方法を使うことをおすすめします。
ActiveSheet
プロパティの詳細な使い方については、以下のページで解説しています。
イテレータを使って Excel ファイルの全てのワークシートを取得する
For Each
ステートメントを使って、Excel ファイル内の全てのワークシートを取得することも可能です。
Dim sheet As Worksheet
For Each sheet In ThisWorkbook.Worksheets
Debug.Print sheet.Name
Next
ThisWorkbook.Worksheets
はイテラブルなオブジェクトであり、For Each
ステートメントを使って、全てのワークシートを取得することができます。
上記の例では、sheet
には Excel ファイル内の全てのワークシートが順番に代入され、Debug.Print sheet.Name
でワークシートの名前を出力しています。
具体例
前述した方法を使って、具体的な例を見てみましょう。
名前を指定して取得する
まず、最もシンプルな例として、名前を使ってワークシートを取得する方法を見てみましょう。
Dim ws As Worksheet, cellValue As String
Set ws = ThisWorkbook.Sheets("Sheet1")
cellValue = ws.Range("A1").Value
Debug.Print cellValue
上記の例では、ThisWorkbook.Sheets("Sheet1")
でSheet1
という名前のワークシートを取得し、Range
プロパティを使ってセルA1
の値を取得しています。
全てのシートに対して処理を行う
次に、全てのワークシートに対して処理を行う例を見てみましょう。
Dim sheet As Worksheet, concatenated As String
For Each sheet In ThisWorkbook.Worksheets
concatenated = concatenated & sheet.Name & ","
Next
上記の例では、For Each
ステートメントを使って、全てのワークシートに対して処理を行っています。
concatenated
には、全てのワークシートの名前がカンマ区切りで連結されていきます。
まとめ
VBA を使ってワークシートを取得する方法について解説しました。
ワークシートを取得する方法は複数ありますが、その方法によって保守性や可読性が変わるため、適切に使い分けることが重要です。
特に、現在アクティブなワークシートを取得する方法は、実行される環境によって対象とするワークシートが変わるため、安易に使うことは避けるべきです。
保守性について、定数定義のポイントについては、以下のページで詳しく解説しています。
今回紹介したコードを参考に、自分の業務に合わせてワークシートを取得する方法を使い分けてみてください。