【Excel VBA】シートの参照

りゅう
こんにちは!りゅう(@ryupong_b)です。
今回は、シートの指定および参照について解説していきます。
はじめに

今回は、シートの指定および参照について解説します。
3つのパターンの参照を例として挙げてサンプルコード付きで解説します。
最後までお付き合いください。

この記事を読むメリット
  • 3つのパターンの参照方法が分かります
  • 構文や引数などの基礎情報から学べます
  • 参照における注意点も解説します

使用例

サンプルコード、引数を掲載し具体的な使用方法を説明します。
説明の前に、参照の手段として以下3つのパターンがあることを押さえておきましょう。

参照の3パターン
  1. 絶対的な参照:”1枚目のシートを参照する”という絶対的な位置を指定する参照方法
  2. 相対的な参照:”隣のシートを参照する”という相対的な位置を指定する参照する方法
  3. 相対的な参照:”アクティブなシート(最前面にあるシート)を参照する”という参照方法

    絶対的な参照

    シート参照において最も基本かつ重要になる絶対参照の解説です。

    構文

    WorksheetObject.Worksheets(index:name)

    引数

    # 引数 必須 詳細
    1 index シートのインデックス番号を指定します。
    インデックス番号は、先頭のワークシートから1,2,3…の順に割り振られています。
    ※シートの追加・削除・移動などを実施するとインデックス番号が振りなおされます。
    2 name シート名を指定します。

    indexかnameのいずれかは必須となります。

    りゅう
    記載した通り、インデックス番号はシートの追加や削除などの処理を行うと再割り振りが発生しますので、シート名の指定がベターでしょう。
    なお、「先頭のシート」や「末尾のシート」という参照の場合は、インデックス番号がオススメです。
    サンプルコード
    Public Sub referenceSheet()
    
        ' 先頭(一番左)のシートを選択する
        ThisWorkbook.Worksheets(1).Select
    
        ' 末尾(一番右)のシートを選択する
        ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Select
    
        ' Sheet1を選択する
        ThisWorkbook.Worksheets("Sheet1").Select
    
    End Sub
    

    相対的な参照

    使用頻度は少ないものの、柔軟性がある相対参照の解説です。

    構文

    WorksheetObject.Next/Previous

    サンプルコード
    Public Sub referenceSheet()
    
        ' 2番目のシートを起点にし、右隣のシートを選択する
        ThisWorkbook.Worksheets(2).Next.Select
    
        ' Sheet2を起点にし、左隣のシートを選択する
        ThisWorkbook.Worksheets("Sheet2").Next.Select
    
    End Sub
    

    アクティブシートの参照

    アクティブシートの参照の説明です。

    構文

    WorkbookObject.ActiveSheet

    サンプルコード
    Public Sub referenceSheet()
    
        ' アクティブシート名をメッセージボックスに出力する
        MsgBox ThisWorkbook.ActiveSheet.Name
    
    End Sub
    
    りゅう
    アクティブシートは、シートに関わる処理を実行すると自動で切り替わることがありますので、極力避けた方がよいでしょう。
    アクティブシートの危険性については、以下の記事にて解説しています。
    あわせて読みたい
    【Excel VBA】ActivateSheetの危険性について はじめに 今回は、ネットでよく見かける「ActiveSheet」のデメリットについてです。 こちらはVBA以外の理解があるプログラマさんでも、使っている方が多いと思いますが...

    参照時の注意点

    参照時には、存在しないシートを参照するとエラーとなることを意識するようにしましょう。
    例えば、以下コードは 先頭のシートの左隣を参照しますが、そもそも対象となるシートが存在しないためシステムエラーとなります。

    サンプルコード
    Public Sub referenceSheet()
    
        ThisWorkbook.Worksheets(1).Previous.Name
    
    End Sub
    

    場合により、シートの存在チェックのテクニックを活用しましょう。

    あわせて読みたい
    【Excel VBA】シートの存在チェック(同名シートの存在チェック)  はじめに 今回は、シートの存在チェックについて解説します。シートの追加やシート名の変更などを実施する際に、ブック内に同名のブックがあるとエラーとなってしまい...

    さいごに

    いかがでしたでしょうか。
    私としては、エラーや予期せぬ挙動を避けるため、「絶対的な参照」を使用するように心がけています。
    場合によって、さまざまな参照を使い分けてコーディングしましょう。

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!

    この記事を書いた人

    大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

    コメント

    コメントする

    CAPTCHA