関数やプロシージャを、単に Function とか Sub とせず、前に Private や Public を付けることがある。

例えば、数値型の関数 fnc(引数 文字型の変数一つ)

Public Function fnc( sVal as String) As Integer

~(内容省略)

End Function

というように書ける。


この、Private と Public の違いは「他のモジュールから参照できるかどうかである。

Privateは、他のモジュールから参照できない

Publicは、他のモジュールから参照できる


上記の例のfncが M1 という標準モジュールにあったとする。その場合、fnc は Public なので他のモジュールから呼び出すことができる。しかし、上記の例で、Public を Private に書き換えると他のモジュールから呼び出しができなくなる。


なお、上記のfncがシートモジュール Sheet1 に書かれた関数の場合、他のモジュールから認識されないように見える。しかし、 fnc の前にシートモジュール名を付ければ認識できる。

 Debug.Print Sheet1.fnc("あ")

というように、シートモジュール名と関数名を.(半角ピリオド)でつなぐとよい。



VBAを使っている人で、ソースコードの整理に悩んだ人は多いだろう


Windowsでは「フォルダ」と「ファイル」の概念がある。フォルダの下にフォルダを作れるので、階層構造で置き場所を作成でき、それで整理できる。

しかし、VBAで共通の定数/変数/関数を作り、標準モジュールに処理をいくら上手に振り分けたとしても、Publicの関数やプロシージャはプロジェクト内で共有されてしまう。上記のWindowsの概念でいえばファイルの概念のみでフォルダの概念が無いようなものである。


というところで

・フォルダのように、フォルダが違えば配下に同じ名前のフォルダやファイルを置けるといいな

・どこのフォルダに入っているのか分かればいいのにな

というように考えたことはないだろうか?


PC内のファイルを指定する際、 c:\windows\~ \readme.txt のように、パス名を指定することがある。これと同様に「モジュールをフォルダ(パス)のような位置づけ」にして、関数やプロシージャの前に付けるようなコーディングは、実は可能なのである。それによりソースコードの整理整頓が格段に行いやすくなる。


私の経験であるが、そのようなれにより生産性/保守性は格段に向上した。


それには、ちょっと敷居が高いと感じるかも多い、クラスモジュールを使う。

この先、クラスモジュールへの抵抗感をなくせる記事を書いていく所存である。



関連ページ このページより詳細なモジュールの説明あり
ブログトップへ
ブログ内検索キーワード
 クラス モジュール

システム開発に携わった人なら、システムの保守性の大切さは知っているだろう。

しかし、具体的にどのようなコーディングを行っておけばよいのか、ということを理解しているプログラマは意外と少ないようだ。VBAに限った話ではないが、現場のプログラマのコードを見れば推して知るべしである。


なぜなんだろう?

プログラマのレベルが低い、という問題もあるだろう。しかし、IT業界自体が保守に対して力をおらず、そういう教育せず、各個人の技量に任せてしまっているのではないだろうか?という気がする。特にオープン系と呼ばれる

システムになってから顕著ではないか、と感じている。


しかし、オブジェクト指向言語に限って言えば、MVCモデルがあったり、Javaデザインパターンがあったりと、開発効率と保守効率を両立される手法は発表されている。


しかしながら、それを身につけている人は意外と少ない。


これは非常にゆゆしき問題である。

もう10年くらい前に「SEクライシス」などという言葉も流行った。


しかし、本質はどうなのだろう?

ろくでもないシステムを作り、それを何とかかんとかごまかしながら使っている。だから人が足りない。それによってベンダーは潤う。こういう事ではないのか?

きちんとしたシステムであれば変更にも強い。そういうシステムが作れるのであれば、システムは金食い虫にはならないだろう。携わる人も減る。ベンダーの収益が下がるが、それは適正な状態に戻るだけである。それにより、創造的な新しい仕事に向くのではないか?

SEクライシスはSEのレベルの低さの言い訳に思えてくるのである。


ちょっと横道にそれたが、保守性を高めることは顧客にとって費用対効果が高まることになるのだ。今のようなITのあり方では、システムで企業を支えることはできないだろう。