Excel開発で「シート操作」は頻度の高い処理のひとつです。
FromシートからToシートへと、データ転記をするようなシーンで欠かせないため、「記述の仕方」次第では、膨大なStep数になるので注意が必要です。
みなさん、こんにちは。セルネッツ竹本です。
今回は、コーディングStep数を少なくし、さらに、「対象シートが的確に識別できる」テクニック、シート名に対する操作用Object名の設定をテーマに、解説いたします。
◆シートには、「序列ID」と操作用に「Object名」を設定すると良い
冒頭図の例では、5枚のシートで構成され、シート名は、
1枚目:MENU
2枚目:11IN
3枚目:31OUT
4枚目:91商品M
5枚目:97設定
です。
これを良くネットで紹介されている方法を使うと、
Dim ws1 As Worksheet
Set ws1 = Worksheets(“MENU”)
のように、シートごとにSet格納するケースが多いと思います。
セル番地A1に、値1を出力する場合は、以下のような記述がほとんどです。
ws1.Range(“A1”).Value = 1
実は、この方法、プログラム内部でシート名称を”完全固定“で決め打ちしているため、
万が一の操作ミスで、シート名に目に見えないSpaceが混入した時点で、シートが存在しないため、実行時エラーが発生します。
◆シートのObject名に名前を付与すると・・・
Set格納が不要となり、こう記述できます。
O_00.Range(“A1”) = 1
もし、シート名によからぬ文字が混入しても、実行時エラーが回避できます。
そして、ポイントですが・・・。
Excel業務の開発依頼には、シート枚数が大量になケースも珍しくありません。
このため、物理的なシート名称を「使用するシートの枚数分」定義し、ハードコーディングすると、融通がきかないばかりか、「シート名での混乱」は避けられないでしょう。
例えば、
[売り掛け金6月]、[買掛金6月]、[昨年の売掛金6月]、[先月売掛金]
こういうケースで、”売掛金のシートに・・・”と言われた時点で、「どの売掛金シートのこと?」となるのは想像がつきます。
このような設計では、致命的な問題を生じることが多いため、基本はID管理の原則に従い、序列を設定しましょう。
例)[A売り掛け金6月]、[B買掛金6月]、[C昨年の売掛金6月]、[D先月売掛金]
Set格納したシート変数は、使用後にNothing開放も必要となり、1セットで使うため、シート数が多いほど、Step数も比例して多くなります。
が、Object名による操作は、もともとブック内に実装されているため、それが不要です。
スッキリ書きたい方は、今日から試せることなので、是非、お試ししてみてください。
今回のテーマは、「可読性の高まるシート設計」について、解説を行いました。
本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。