ついて情報発信しています。VBAプログラムは本当初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。2019/11/02>VBAで上級者から初段にステップアップするシリーズの2回目です。初段から二段へのステップアップも視野に入れて、コーディングの流れを意識したプログラミングを身に付けていきましょう。初心者~三段をご参照ください。上級者になって今更かよ、と思うかもしれませんが、まずはモジュールの種類と役割をおさらいしていきましょう。これまでお世話になってきた標準モジュールは最後に見て行きます。シートモジュールとブックモジュールまずはシートモジュールとブックモジュールです。これらはオブジェクトにくっついているモジュールで主にイベントに使うんでしたね。その本当の役割は何でしょうか?それは、そのオブジェクト特有のプロシジャを記述する事です。複数のシートがあったとして、あるシートを編集するときだけはパスワードの入力が必要、と言った具合です。フォームモジュールユーザーフォームの挙動を記述するのがフォームモジュールです。このモジュールに記述されたプロシジャーは他のモジュールに記述されたプロシジャから変数を受け取ることができません。ユーザーフォームの挙動を制御するために使いましょう。言っても挙動そのものを書くと言うよりは、挙動が記述されているプロシジャを呼び出す設計にするのがよりよいでしょう。クラスモジュールクラスモジュールは初段から二段へのステップアップで触れますので、ここでは簡単な概念の説明に留めます。クラスモジュールとはクラスを自作するためのモジュールです。これまで何度もシートを削除したりコピーしたりしてきましたよね。あのシートはオブジェクトです。オブジェクトとはモノのことです。Sheets.Addというのはシートコレクションというシートの集まりというモノ(=オブジェクト)が持っているAddというメソッドを使っています。メソッドとはプロシジャのことです。SubプロシジャとかFunctionプロシジャと同じです。クラスというのはオブジェクトがどんなメソッドやプロパティを持っているか記述してあるものです。SheetsはAddというプロシジャを持っていて、それを実行するとこうなりますよ、と言う事です。そのクラスを自分で作るために記述する場所がクラスモジュールです。詳細な解説は下記リンクをご参照下さい。ユーザーが選択したファイルを開く実務的なオブジェクトを生成する標準モジュール標準モジュールはこれらのモジュールを呼び出すなどプログラム全体の流れを制御するのが本来の使い方です。これまでは余り深く考えずにプログラムの中身を標準モジュールに記述していましたが、今後は標準モジュールの役割は処理の流れをコントロールする役割だと言うことを意識してプログラムを作成しましょう。処理は塊ごとに作っておいて、それを順に呼び出していくイメージです。このイメージが掴めると初段以降、オブジェクト指向を意識したプログラミングが可能になります。メンテナンス性も大幅に向上します。標準モジュールで処理の流れを制御するそれぞれのモジュールの役割が整理できたので、標準モジュールの役割と処理の流れについて深掘りしていきます。それぞれのモジュールの役割と処理の流れを図示するとこのようになります。イメージとしては、売上管理と受注処理というの2種類の処理を行うの機能を持ったツールの場合です。役割をきっちり理解した標準モジュールの設計のイメージ図この図はフローチャートではありません。メインの標準モジュールが、作業の塊の標準モジュールを呼び出し、その標準モジュール内に細かく分けた処理の塊を順に呼び出していくイメージ図です。一つの作業群を一つの標準モジュールにまとめ、それぞれの作業群の処理を一つのプロシジャーにまとめて記述します。この図の内容について、事項で詳しく解説していきます。標準モジュールはメインのものを一つだけ作ります。図で黄色くハイライトしたメインの標準モジュールの部分です。売上管理という作業と受注処理という作業のツールを作成する場合、下記の3つの標準モジュールを作ります。流れを制御するためのメインの標準モジュール売上管理の作業の流れをコントロールする標準モジュール受注処理の作業の流れをコントロールする標準モジュール標準モジュールはむやみに作ってはいけません。一つの作業の流れは一つの標準モジュールにまとめます。エクセルマクロブックが持っている機能の数+1の標準モジュールが存在するようにします。+1はどの標準モジュールを呼び出すかを決める元締め的な標準モジュールです。売上管理の作業のための標準モジュールから受注処理の為の標準モジュール内のプロシジャを呼び出す事はしません。このため、それぞれの標準モジュール冒頭の流れをコントロールするプロシジャ以外はすべてPrivateでプロシジャを定義します。各標準モジュールの冒頭の部分だけ、メインの標準モジュールから呼び出されるようにPublicにしておきます。ブックを開くなど、各標準モジュールの機能で共通の作業はクラスモジュールで作成しておき、それを各標準モジュールで使うようにします。注意点は、クラスはプロシジャを呼び出すわけではないと言う事です。クラスという動作の手順書利用して、その標準モジュール内で新しくオブジェクトを生成します。そのオブジェクトを利用すると言うイメージです。このあたりは初段の講座で解説します。まとめ処理の流れをきちんと設計すると、複数の機能を持ったツールを作成出来るようになります。ポイントをまとめると下記の通りです。標準モジュールは流れを制御するためのものメインの標準モジュールと機能ごとの標準モジュールを作る一つの機能は一つの標準モジュールにまとめるメインの標準モジュールからそれぞれの標準モジュールを呼び出す以外は、標準モジュールから別の標準モジュールを呼び出さないようにするこれらを意識して、スパゲッティ*1と言われない、複雑な作業もすっきりとしたコードで書けるようにしていきましょう。ここができるかどうかが上級者と初段の大きな違いです。A1セルの値をメッセ...VBAによるプログラミングにオブジェクト指向を取り入れます。上級者から初段へのステップアップの最終回です。日)1985年生まれの会社員。業務改善部隊に異動で芽を出し、現在に至る。本業での知識と経験を元に、ブログとTwitterで1生産性向上2業務改善3自動化について情報発信しています。【プログラミング】文法の勉強だけでは遠回り|挫折しない上達のコツ月別アーカイブはてなブログをはじめよう!mutable_yunさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。