【VBA】シートを取得する(ミスしにくいTipsあり)

Excelでマクロを作成するときにちょっと込み入ったことをやろうとしたときに、覚えるであろうシートの取得について説明します。

シートの種類

Excelのシートには何種類かあります。

シートの種類説明
ワークシート普段目にしているシートのことです。
グラフシートグラフ専用のシートで、シートにはセルがなく、グラフだけが表示されます。
その他の種類のシート最新のExcelでは利用されていないExcel 5.0/95のモジュールシート、
ダイアログシートなどなので気にしなくていいでしょう。

主に利用されるのはワークシート、グラフシートのため、以降ではこの2つに絞って説明します。

シートの情報の取得元

シートの情報は以下の2種類のプロパティから取得します。

プロパティ説明
Sheetsすべてのシート(ワークシート、グラフシート等)が格納されています。
Worksheetsワークシートのみが格納されています。

実際にVBAを組む時にはほとんどがワークシートに対する操作なので、Worksheetsプロパティを利用しましょう。つまりは、グラフシートに対して操作する場合のみSheetsを利用するということです。

プログラムで基本は「必要なものだけを利用する」ことです。そうすることで、シンプルで読みやすいコードになります。

シートを取得する2つの方法

シートを取得する方法には以下の2つの方法があります。

  • シートの名前を指定する方法おススメ
  • シートのインデックスを指定する方法

シートの名前を指定する方法

シートの名前を指定して取得する方法方法です。

Sub シート名がSheet1のシートを取得()
    Dim ws As Worksheet 'Worksheet用の変数wsを定義する。
    Set ws = ThisWorkbook.Sheets("Sheet1") 'シート名が「Sheet1」のシートを取得する。
    Debug.Print (ws.Name) 'wsに格納したシートの名前をイミディエイトに出力する。
End Sub

シートのインデックスで指定する方法

インデックスとは一番左のシートを1として、何番目になるシートかを指定する方法です。

Sub 一番目のシートを取得()
    Dim ws As Worksheet 'Worksheet用の変数wsを定義する。
    Set ws = ThisWorkbook.Sheets(1) '現在開いているワークブック(Excelファイル)の一番目のシートを取得する。
    Debug.Print (ws.Name) 'wsに格納したシートの名前をイミディエイトに出力する。
End Sub

ThisWorkbook.Sheets(1)の部分をThisWorkbook.Sheets(2)とすれば、左から2番目のシートを取得できます。

シートを取得する際のTips

  • シートを指定する場合はThisWorkBook.Sheets()のようにThisWorkBookと明示しましょう。決して、ActiveWindowActiveWorkBookActiveSheetは利用しないことです。VBAを実行したとき何がアクティブか分かりませんから、うまく動かない可能性があるためです。

コメント

タイトルとURLをコピーしました