【VBA】第3回 スパゲティコード添削会を受けて

VBAでの操作

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 AppSheetGAS生成AIを初めて使う人向けに書いています。ぜひ手に取って見てください。

コメント

タイトルとURLをコピーしました