[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『標準モジュールの分け方。』(なた)
こんにちわ! いつもとても勉強させてもらっています。なたと申します。
さて、標題にもあるとおり、標準モジュールって追加して増やせますけど、 何か明確に「分け方」みたいなものってあるのでしょうか。。。
なるべくひとつにまとめておいたほうがいいのでしょうか? それとも、各自適当に分けるのでしょうか。
もしそうでしたら、皆さんの「分け方」を教えて頂けるととても参考に なるのですが。 また、名前も変えられるみたいですが、怖くて(特に理由はないのですが) 変えてません。
知恵をください〜 winxp excel2007 です。
私の場合です。
マクロが多くなって分けたほうが分かりやすいときは分けて、 モジュールの名前も中身に応じて変えます。 そうでなければあえて分けません。 モジュールが一つなら名前も変える必要がないですね。 (当たり前すぎる答えみたいですけど)
モジュールを分けたときのデメリットは、 修正を繰り返してファイルのサイズが大きくなったときに、 モジュールを一旦削除(エクスポートしておく)して、 再度インポートするとある程度サイズが小さくなりますが、 モジュールの数の分だけやらなければいけないのが、 ちょっと手間といえば手間でしょうか。
今のところそれ以外に不都合は感じていませんが、 他の方はどうでしょうか。 ご意見をお聞かせ下さい。 (sato)
そうなんですね。何かルールがあるのかと 思ってたので安心しました^^ ありがとうございます。
モジュールをいったんエクスポートして 再度インポートするとサイズが 小さくな るんですか? それは良いことを聞きました! やってみます。
※PSサーバー復旧おつかれさまでした。 (なた)
小規模であれば、どのように組んでも管理できると思いますが、 コードが多くなり、処理や関数が多くなってくると機能ごとに整理 したくなりませんか?
大きな規模の処理を書くときは、一つの機能・処理に関係するものをまとめ ておき、そのファイルに依存する部分を定数(Const)で定義したり、 別モジュールに分けたりしておくことで、そのモジュールを他にコピーする ことで、簡単に再利用できるようになります。
ファイルの処理、DBの処理、画像処理、集計の処理、などいくつものファイルで 共通に使用できそうなものは、汎用性を持って作っておくと、効率よく VBA(に限りませんが)を利用できます。 (Mook)
>標準モジュールって追加して増やせますけど、 >何か明確に「分け方」みたいなものってあるのでしょうか。。。
簡単に言ってしまえば、機能別に管理しています。 これは、現時点で大きかろうが小さかろうが関係ありません。 だって、将来大きくなるかもしれないから・・・。
一つのモジュールを機能的にまとまった形式にまとめておき、そのままクラスモジュールに移行しても 運用が可能になるようにしておきます。
このように作成しておくと、むやみにPublic変数など使わなくても済むと思いますよ!!
これは元々は、マイヤーズの複合設計法に基づいたモジュール分割法です。
http://www.netlaputa.ne.jp/~hijk/study/pe/program.htm#A03
ここに簡単に複合設計法についてまとめた記述があります。 「モジュール設計」という副題で モジュール強度と結合度という指標でモジュールを評価しています。 モジュール強度を強く、結合度を弱くすることを複合設計法では目指しています。
参考にしてください。
ichinose
サイズに関しては説明の観点から「大きな規模の」と書きましたが、 目的からいえば ichinose さんのいうように、規模は関係なく機能 に関して分類すれば良いとおもいます。
モジュール名に関して、制約としてはプロシージャや関数名と同じものは つけられないということはありますが、あとは特に何をつけても問題は ありません。
自分の好きなようにつければ良いのですが、私の場合 PRG_*** ・・・ そのファイルに特化した処理 必要に応じてここから LIB_*** の関数や処理を呼び出します。 LIB_*** ・・・ 汎用性のある機能単位 モジュール内で閉じており、他のモジュールを参照しないようにし、 必要なデータは引数で渡す。 例、 LIB_CSV_IO, LIB_Timer, LIB_GraphicControl, LIB_DB_IO など DBG_*** ・・・ 試験など最終的には使用しない評価機能、デバッグ機能
のように分類しています。 たとえば LIB_CSV_IO というようなものは CSV ファイルに関する機能を 提供するもので、 ・ファイルを配列に読み込む関数 ・指定した位置のデータを読む関数 ・配列をCSVファイルで出力する関数 ・CSVファイルを指定した位置に表で出力する処理 などを集めたものです。汎用的な処理にしてまとめておけば、他のEXCEL ファイルでCSV を扱う処理をしたいときは、このモジュールをコピー (ドラッグ&ドロップ)して簡単に利用できます。
機能に関してまとめるということが身につけば、クラスの利用などにも目が 向いていくと思います。 (Mook)
レスありがとうございます。 そうなんです。クラスモジュールとの違いがいまいちわからなくって。
標準モジュール1は印刷するとき 標準モジュール2はデータから画面に読み込みするとき
などにわけてるのですが、名前をつけるとわかりやすそうでね。(^^) うむむ。 でもクラスモジュールていまいち存在意味がわからないんです。(__) (なた)
クラスモジュールは、まさにクラスを作成するためのものです。
クラスはそのオブジェクトとプロパティ、メソッドを規定、提供します。 EXCEL でいえば、Workbook、Worksheet、Range、Cells、Shape などはなじみが深い クラスだと思いますが、これらのような(これほど大きくなくとも)クラスを提供する ためのものです。
例えばストップウォッチのクラスを作るとしたら、メソッドとしては Start、Stop、 Lap などがありそうですし、何回か実行したらそれまでの平均、最小、最大 をとる ことなどもできそうです。 プロパティとしては、実行回数、分解能、Lap の回数の指定なども持たせそうです。
このようにして myStopWatch クラスを規定しておけば、 Dim myWatch As New myStopWatch
として、 myWatch.Start myWatch.Stop MsgBox myWatch.getTime()
などのように利用ができます。
これは、今回の話題になっているモジュールのコンポーネント化をもう一歩進めた、 本来のオブジェクト指向に近い実装を実現する手段となります。 (Mook)
ふむふむ(@@)
では、クラスモジュールでメソッドを設定(?)しておけば、 標準モジュールなどでも、そのメソッドをコードに書けるって ことですよね。
なんだか新たなトビラが開けた器分(おおげさ)(3v3) レス感謝です。。♪ (なた)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.