複雑なマクロを見易く効率的に組むためのアイデアは?

Question 77.2 その他 Previous Next
ちょっと複雑で手順を踏んでかなくてはいけないマクロを組む場合、デバックなどが発生することを見込んで、見やすく効率的に組んでいくためのアイデアってありますか?
右端にコメントを書くだけでは、イマイチわかりにくいところもあるので、、、
Answer   Copyright (C) 2005.12.29 Yoshioh Nagai
複雑なマクロを「見やすく効率的に組んでいくためのアイデア」をお尋ねですので、実務の傍らでマクロを作成する人ならばという前提で、私の考え方を箇条書きにしておきます。

1. プロシージャ名、変数名を
日本語表記にして処理内容や用途を明示する (下記参照)
  ・プロシージャ名 ・・・ [動詞形] 何をどうするか   (例)
Sub 指定顧客の請求書を作成する()
  ・変数名 ・・・ [名詞形] 内容・用途を明確に表す  (例)
下端行、消費税、氏名、etc.

2.
処理を細分化してそれぞれをPrivate SubプロシージャまたはFunctionプロシージャにする

3. 多くのジョブで
共通使用するマクロはアドインにするか別ブックに作成し、それを共同利用する

4. 実行ボタンなどで実行される
メインマクロは上記2.のプロシージャを次々に実行するようにする

5. 上記2.のプロシージャが
長くなる場合はコメント行を入れておく (下記参照)
  (例)
' 「請求書」シートの明細欄をクリアする

6. 理解しにくいコードには
右側にコメントを入れておく (下記参照)
  (例)
' データの下端行を取得

7. 処理構造が一見で掴めるよう、
適当にインデントしおく (下記参照、関連ページはこちら)
Sub キーが一致するデータを抽出して別のシートに作成する()
10  番号右端 = Worksheets("Sheet2").Cells(1, Columns.Count).End(xlToLeft).Column
20  表右端 = Worksheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column
30  答列 = 1
40  For 番号列 = 1 To 番号右端
41      番号 = Worksheets("Sheet2").Cells(1, 番号列).Value
50      For 表列 = 1 To 表右端
51          表の値 = Worksheets("Sheet1").Cells(1, 表列).Value
60          If 番号 = 表の値 Then
61              名前 = Worksheets("Sheet1").Cells(2, 表列).Value
62              Worksheets("Sheet3").Cells(1, 答列).Value = 名前
63              答列 = 答列 + 1
64          End If
70      Next
80  Next
End Sub
8. 結果が見えないところ(配列など)で処理しないで、シート上で処理する
amazon_なか見!検索_こちら
9. オブジェクトの参照などの
難解なテクニックを出来るだけ使わない
  (下記 Excel VBA…合わせ技[編] 23ページ参照)

上記の手法は拙著の中で一貫して採用していますし、関連する解説もありますので、必要でしたらご参照ください。
  ・Excel VBA マクロ組み方講座 (22ページ他)
  ・Excel VBA マクロ組み方講座 プロの定番・裏技・合わせ技[編] (22~26ページ他)
右図をクリックすれば、なか見の一部を検索できます。実物は全国の大型書店の棚または主な図書館でご覧いただけると思います。

では、あなたが考案された方法や上記に関するご意見等、ご連絡いただければ幸いです。


 

Excel VBA Macro