ワークシートの取得

にメンテナンス済み

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プロパティの詳細な使い方については、以下のページで解説しています。

ActiveSheet
VBAでExcelの現在アクティブなシートを取得する方法と具体例について解説します。また、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 を使ってワークシートを取得する方法について解説しました。

ワークシートを取得する方法は複数ありますが、その方法によって保守性や可読性が変わるため、適切に使い分けることが重要です。

特に、現在アクティブなワークシートを取得する方法は、実行される環境によって対象とするワークシートが変わるため、安易に使うことは避けるべきです。

保守性について、定数定義のポイントについては、以下のページで詳しく解説しています。

マジックナンバーを避ける
プログラムにおいて、マジックナンバーは原則避けるべきコーディングです。VBA 以外の言語においては、少し学びさえすればマジックナンバーが現れることはほぼ無いかと思いますが、VBA ではなかなか避けられないケースは多いです。扱うデータの性質上

今回紹介したコードを参考に、自分の業務に合わせてワークシートを取得する方法を使い分けてみてください。

#vba #Excelの操作 #worksheet #ワークシート #取得