
Excel開発で「シート操作」は頻度の高い処理のひとつです。
FromシートからToシートへと、データ転記をするようなシーンで欠かせないため、「記述の仕方」次第では、膨大なStep数になるので注意が必要です。
みなさん、こんにちは。セルネッツ竹本です。
今回は、コーディングStep数を少なくし、さらに、「対象シートが的確に識別できる」テクニック、シート名に対する操作用Object名の設定をテーマに、解説いたします。
シート間転記の自動化
シート間の転記マクロ、シート名を変えただけで止まっていませんか?
- シート名を変えたり並べ替えたりすると、マクロがエラーになる
- 入力シートから出力シートへの転記を、まだ手作業で行っている
- マスタシートの参照先が多く、どこで何を使っているか追えない
そのお悩み、シート構成を整理したマクロの改修で解決できます。Excel専門のシステム開発会社『セルネッツ』なら、入力・出力・マスタのシートを整理し、転記を自動化できます。シート名の変更に強い作りにして、改修の手間も減らします。前任者が作ったマクロの引き継ぎにも対応します。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料
◆シートには、「序列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実務の効率化において、ご参考お役立てになれば幸いです。
相見積もり歓迎
転記・変換の自動化は、8万円〜が参考価格です
- シート間のデータ変換は8万円〜(税別)が参考価格です
- マスタ参照を含む集計レポートは12万円〜(税別)です
- Excelで管理しきれない量なら、正直にお伝えします
セルネッツでは相見積もりを歓迎しています。料金は基本料金50,000円に、要件定義・設計・開発の時間単価を加えた体系です(税別)。データ量によっては、データベースとの連携もご提案します。システム導入相談やセカンド・オピニオンも、60分無料で承ります。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料