ワークシートを指定する方法としては、
シート名やシート番号を利用する方法が一般的です。
' シート名 Worksheets("データ").Cells(R, 1) ' シートインデックス番号 Worksheets(1).Cells(R, 1)
よく使用する方法ですね。
さて、シートを指定する方法はこの2つの他にもう1つあり、
それがタイトルの「シートオブジェクト名」を利用する方法です。
この方法、実は「最も便利かつ簡単な最強のシート指定方法」ですので、
知らなかった方はこの機会にぜひ覚えてみて下さい。
シートオブジェクト名とは、簡単に言うと
「ソースコード上のシート名をつけることができる機能」です。
VBE(マクロを書くところ)を見渡してみてください。
こんな場所がありますよね。
この「Sheet1 (集計表)」や「Sheet2 (売上データ)」という部分こそ、
シートのオブジェクト名が書いてあるところです。
ここに表示されている名称のうち、
- Sheet2 がシートのオブジェクト名
- 売上データ が実際のシート名
という区分けになっています。
さて、このオブジェクト名であるSheet2は自由に変更ができます。
↑ここをクリックすると出てくる、
↑ここの(オブジェクト名)の部分を書き換えることで変更します。
分かりやすい様に「シートを表すWS+実際のシート名」にしてみました↓
この設定をあらかじめしておくことで、
以下のようにオブジェクト名でシートを指定することができるようになります。
Worksheets("集計表").Range("A1") = Worksheets("売上データ").Cells(R, 1) ' ⇩ シートオブジェクト名を使って書き換える WS集計表.Range("A1") = WS売上データ.Cells(R, 1)
短い上にとても分かりやすいですね!
このシートオブジェクトを活用したシート指定はメリットが盛りだくさんです。
上記の通り「コードが短くなってしかもわかりやすい」のがまずはひとつ。
そしてそれ以上に強力なのが、名称を「WS」から始めるように統一した効果で、
wsまで打って「Ctrl+Space」を押すと以下の選択肢から選択入力ができます。
素晴らしい機能ですね!
「ws」とCtrl+Spaceから選択のため日本語入力をOFFのまま入力ができる上、
なんといってもこの選択肢は、
↑これと候補が一致しますからね。
選びやすいことこの上ない。
さらにはもうひとつ、Worksheets(○○)指定のデメリットとして、
↑このように「.を打っても入力選択肢が出ない」問題があります。
これがシートオブジェクト名での指定では、
このように続くプロパティやメソッドも選択入力ができるというおまけつき。
取り違えも起きづらく、読みやすく、書きやすいという、
3拍子揃った最強のシート指定方法ですね。
シートオブジェクト名は「他ブックの指定には使えない」という弱点こそありますが、
自ブックのシートを指定する上では文句なく最強のシート指定方法です。
まだ使っていなかった方は、ぜひとも使ってみてください。
シートオブジェクト名の設定を自動化する
さてこのシートオブジェクト名の設定ですが、本記事では
「WS+実際のシート名」にするルールで行いました。
このルールで設定する場合は機械的な作業になるため、
このシートオブジェクト名の設定をマクロにやらせることもできます。
マクロをマクロに書かせる、俗にいうメタプログラミングですね。
このマクロをショートカットキーなどに登録しておけば、
各シートを選択して数回ショートカットを起動するだけで、
この状態にすることができるようになります。
詳細は以下の記事で解説していますのでぜひともご活用ください。
www.limecode.jp
変数の種類ごとに頭文字を統一する記法
今回用いた「WS+実際のシート名」のように頭文字の英字を統一する命名記法は、
シート以外にももちろん活用できます。
例えばセルをCell、セル範囲をRange、行番号をR_にするなど統一しておけば、
それぞれ頭文字を打っただけでコードを選択入力することができます。
この入力記法を(アプリケーション)ハンガリアン記法と呼び、
自分なりのルールを統一しておけばコーディング効率を劇的に向上してくれます。
↑すべて選択肢入力ができるため、なんと日本語入力が一度もONになっていません。
この命名ルールを採用すると、変数の選択と入力が簡単になり、
打ち間違いや取り違いも大幅に減らすことができます。
気に入ったらマイコーディングルールに採用してみてください。
www.limecode.jp
おまけ:シートオブジェクト名はシート名と一致すべし
シートオブジェクト名やシート変数名をつける際、たまに
「企業リスト」というシートを「CompanyList」と命名しているのを見かけます。
この英訳は絶対やめましょう笑
これは私が日本語変数信者だからという話ではありません。(たぶん)
言いたいことは、「日本語にすべき」ではなく「一致させるべき」です。
日本語変数を採用していない方であっても、
ここだけは「WS企業リスト」という名称にすべきと思う部分です。
入出力がすべてシートと紐づくVBAにおいてはシート名もソースコードの一部であり、
すなわち↓これもソースコードの一部なんですよ。
これを英語にできないのであれば、英語変数も諦めた方が良いと思うのです。
逆にこれをそのままシートオブジェクト名にしておけば、
この選択肢から選べるわけですからね。
それこそもしアメリカ人にこのマクロを引き継ぐとしたって、
英訳してあげるより一致させてあげた方が喜ぶ気がしませんか?笑
ということで、元々日本語変数推しの私ですが、
このシートオブジェクト名は特に英訳をしてほしくない命名になります。
「同じ処理、同じオブジェクトは、同じ単語に統一して命名しなければいけない」
のは変数を何語で書いていても重要な命名規則ですからね。
シートオブジェクト名にはしっかりと、
「実際のシート名」を名付けてあげてください。