【VBA入門】ワークシートをID管理すると可読性がUPするプロのテクニック

Excel開発で「シート操作」は頻度の高い処理のひとつです。FromシートからToシートへと、データ転記をするようなシーンで欠かせないため、「記述の仕方」次第では、膨大なStep数になるので注意が必要です。

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”) = “ABC”
もし、シート名によからぬ文字が混入しても、実行時エラーが回避できます。

Set格納が不要となり、こう記述できます。

O_00.Range(“A1”) = 1

もし、シート名によからぬ文字が混入しても、実行時エラーが回避できます。

そして、ポイントですが・・・。

Excel業務の開発依頼には、シート枚数が大量になケースも珍しくありません。

このため、物理的なシート名称を「使用するシートの枚数分」定義し、ハードコーディングすると、融通がきかないばかりか、「シート名での混乱」は避けられないでしょう。


例えば、

[売り掛け金6月]、[買掛金6月]、[昨年の売掛金6月]、[先月売掛金]


こういうケースで、”売掛金のシートに・・・”と言われた時点で、「どの売掛金シートのこと?」となるのは想像がつきます。

このような設計では、致命的な問題を生じることが多いため、基本はID管理の原則に従い、序列を設定しましょう。

例)[A売り掛け金6月]、[B買掛金6月]、[C昨年の売掛金6月]、[D先月売掛金]

Set格納したシート変数は、使用後にNothing開放も必要となり、1セットで使うため、シート数が多いほど、Step数も比例して多くなります。

が、Object名による操作は、もともとブック内に実装されているため、それが不要です。

スッキリ書きたい方は、今日から試せることなので、是非、お試ししてみてください。

今回のテーマは、「可読性の高まるシート設計」について、解説を行いました。

本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。



全国対応!お気軽にお問い合わせください