blueです。
今回の「スパゲティコード添削会」で学んだ内容をもとに、勉強になった部分をまとめました。自分の備忘録としてだけでなく、他の方にも役立つ情報になればと思います。
@YUExcelMARUさん、@KotorinChunChunさんも書かれておられるように、あくまで私の備忘録的なものです。他への転用は禁じますし、登壇者の方も問題あれば削除いたしますのでお教えください。 @wafu_spaghettiさん、ありがとうございました!


コードの書き方
- ステートメントごとに空白行を入れると、視認性が向上する。

- コメントごとに空白行を入れると読みやすくなる。

Enumの使い方
- 列をEnumで定義すると、列追加時のメンテナンスが楽になる(Enumに記載すれば自動で反映される)。

- Enumで定義しておくと自動メンバー表示に出てくれるのでシートを見直す必要がなくなる。

- Enumはバグが発生しやすいが、一度コメントアウトしてコンパイルすると解決することが多い。
- Enumの名前はプロシージャ名と重ならないようにする。
- シート名をEnumの名前に含めると、複数シートで使用する際に管理しやすくなる。

モジュールレベル変数とローカル変数
- 同じ名前を付けることは可能だが、ローカル変数が優先される点を理解しておく。
- モジュールレベル変数とローカル変数は区別する。接頭語(md, pv など)をつけるとわかりやすい。
- モジュールレベル変数は、すべてのプロシージャで共通して使用されるもの(例:
ws As Worksheet
)に限定する。
=プロシージャごとに使われ方が違うものには設定しない(処理途中で他のプロシージャに行くと変数の内容が残ってしまう)

関数の呼び出し
- 関数の呼び出しはステートメントの外に出すと、コードが整理され、可読性が向上する。

プロシージャ名のつけ方
- メインのSubには「☆」などの記号をつけると、プロシージャ一覧の上位に表示され、管理しやすくなる。

固定セルの定数化について
- 固定セルの参照にはセル番号ではなく、
Public Const
で定義すると管理が楽になる。
→動く可能性があるセルには名前の定義を行うのが望ましい。

変数について
flag
などの変数名は、何のflagかわかるような名前にする。(以下は最低1件は出力とした)

- 最終行取得のコードでは、データ数も取得しておくとよい(ほしいのは最終行ではなくデータ数)。
Resizeで必要数をとれるようにもなる。

まとめ
今回学んだVBAの改善ポイントを簡潔にまとめます。
- 可読性向上のための空白行の利用:空白行の活用、適切なコメント整理
- Enumの活用:列の定義にEnumを使い、メンテナンス性を向上
- 変数の管理:モジュールレベルとローカル変数を明確に分ける
- 関数とプロシージャの設計:関数をステートメント外に分離し、整理されたコードに
- プロシージャ名の工夫:メインSubを識別しやすい命名にする
- 定数の活用:固定セルは
Public Const
を使い、管理を容易に - 変数名の最適化:意図が明確な名前をつけ、処理内容を直感的に把握できるように
これらのポイントを意識することで、スパゲティコードを防ぎ、より保守性の高いコードを書くことができます。今後のVBA開発にも活かしていきましょう!
私が書いた書籍です。VBAで培ったWebAPIの知識を基に作成しました。
Google AppSheetやGAS、生成AIを初めて使う人向けに書いています。ぜひ手に取って見てください。
リンク
リンク
コメント