t-hom’s diary

主にVBAネタを扱っているブログです。

Excel VBAでIndexもシート名も使わず、シートオブジェクトをダイレクトに指定する方法

シートの指定方法は名前指定、インデックス指定の他に、オブジェクトを直接指定する方法がある。
最後の方法はあまり知られていないと思うので紹介する。

以下がその図である。
f:id:t-hom:20150202060130p:plain

たとえば、Excel上でシート名を変更した際には普通、オブジェクトエクスプローラーから見てSheet1(Field)などとなる。つまり、オブジェクト名はSheet1のまま変化しない。シートを移動させても同じである。これをプロパティでウィンドウでFieldに変更してやると、図のようになる。

こうすると、コード上で直接そのオブジェクトを用いることができる。

たとえば普通ならSheets("Field").Range("A1")などと書くところを、Field.Range("A1")と書けるようになる。

図の右側のコードは、オブジェクト変数Fieldを用意したのではない。すでに実体(インスタンス)としてFieldシートオブジェクトが存在するので、何ら宣言なしに扱うことができるのである。

この方法はシート名やシートの並びに影響を受けないため、特に、固定のシートを使い続けるマクロでは非常に使いやすいと思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。