April 6, 2014

Excel VBAの再利用性を高めるために

Excel VBAのコードはWeb上のあちこちに紹介されていますが、実際にコピーしてきて手元で使おうとすると、エラーが出ることがよくあります。その原因の一つは、コードが特定の形をしたデータにのみ使えるような形で書いてあり、マジックナンバーが多数指定されていることです。
 再利用性が高いコードを書こうとすると、マジックナンバーを使わない、という考え方を、セル範囲やオブジェクトの指定にも使っていくことが望ましいでしょう。

ここでは、Webでよく見かけるコードの例を挙げて、本来の目的・意図に応じた書くべきコードを示します。

よく見かけるコードの例 本来の目的・意図 書くべきコード
Worksheets("Sheet1") "Sheet1"という名前のシート そのまま
ブックの中の1番目のシート Worksheeets(1)
アクティブなシート Activesheet
Range("A2,F5") $A$2:$F$5 そのまま
選択したセル範囲 Selection
Sheets(i) シートを処理したい(ワークシートもグラフシートも) そのまま
ワークシートを処理したい Worksheets(i)
グラフを処理したい Charts(i)
(埋め込みグラフを処理したい ChartObjects(i))

 なお、マジックナンバーを使わず入力に対して柔軟な書き方をする場合、エラーが生じやすくなるので入力値を確認してエラーを防ぐことが必要です。
例えば、入力の型をTypename関数で調べて必要な型の時だけ入力を受け入れたり、0除算を防ぐために入力値が0以上であることを確認するなどの方法が考えられます。

No comments :

Post a Comment