ワークシートの名前を取得する。

執筆者:

カテゴリ:

目的

  • ワークシートの名前を取得したい。
  • グラフ Graph シートの名前も取得したい。
  • ループで取得したい。

マクロの一例

  1. ワークシートが 3 枚ある状態でテストしてみます。
Sheet1 ~ 3
Sheet1 ~ 3
  • 下記マクロを実行してみます。
    Sub ワークシートの名前を取得するマクロ()
    Debug.Print Worksheets(1).Name
    Debug.Print Worksheets(2).Name
    Debug.Print Worksheets(3).Name
    End Sub
  • VBE のイミディエイトウィンドウに以下の内容が出力されました。
  • Sheet1 , Sheet2 , Sheet3
    Sheet1 , Sheet2 , Sheet3

    グラフシートがある場合

    1. グラフシートがある状態でテストしてます。
    「Graph1」があります。
    「Graph1」があります。
  • 下記マクロを実行してみます。
    Sub sheets使用_ワークシートの名前を取得するマクロ()
    Debug.Print Sheets(1).Name
    Debug.Print Sheets(2).Name
    Debug.Print Sheets(3).Name
    Debug.Print Sheets(4).Name
    End Sub
    1. Sheets で操作対象取得。
  • VBE のイミディエイトウィンドウに以下の内容が出力されました。
  • Graph1 も取得されている。
    Graph1 も取得されている。

    Worksheets でグラフシートの名前を取得しようとした場合、エラーが発生するようです。

    1. エラーが発生するマクロを実行してみます。
      Sub エラー発生_ワークシートの名前を取得するマクロ()
      Debug.Print Worksheets(1).Name
      Debug.Print Worksheets(2).Name
      Debug.Print Worksheets(3).Name
      Debug.Print Worksheets(4).Name 'エラー
      End Sub

    2. エラー発生。
    実行時エラー '9':
インデックスが有効範囲にありません。
    実行時エラー ‘9’:
    インデックスが有効範囲にありません。
    エラー発生行。
    エラー発生行。

    ループで取得


    1. Sheet1 ~ 3 をループで取得してみます。


    Sheet1 ~ 3
    Sheet1 ~ 3
  • 下記マクロを実行してみます。
    Sub ループでワークシート名取得()
      Dim a
      For a = 1 To Worksheets.Count
        Debug.Print Worksheets(a).Name
      Next
    End Sub
  • VBE イミディエイトウィンドウへの出力結果です。
  • Sheet1 ~ 3
    Sheet1 ~ 3

    1. 下記マクロでも同じ結果になりました。


      Sub ForEach_ループでワークシート名取得()
      Dim a
      For Each a In Worksheets
      Debug.Print a.Name
      Next
      End Sub

    テスト環境

    • Windows 10(64 ビット)
    • Microsoft Office Excel 2003

    以上、閲覧ありがとうございました。