Digital_Neko

フリーランスプログラマー

Excel VBA オブジェクト指向を学ぼう

こんにちは、Onoです。

今回はExcel VBAをやっている方向けにオブジェクト指向について書いていきたいと思います。

Excel VBAをしばらくやっていると、クラスモジュールという、見慣れないものがあるのに気づかれる方も多いのではないでしょうか。ここで、オブジェクト指向という概念を理解しておくと、クラスモジュールを使う第一歩になります。ただVBAは継承などをサポートしていないので、厳密な意味でのオブジェクト指向はできません。

ただクラスモジュールを使う利点として、VBAにできないことが、自分の中で明確になります。その為オブジェクト指向を学び、クラスモジュールを使ってみる事をおすすめします。

早速ですがオブジェクト指向とは、現実世界の出来事をコンピューターの中にオブジェクトとして再現し、現実世界と同じように動くようにプログラムを作ります。VBAで行う操作を例に説明します。

ExcelVBAで「シートのデータを並べ替えて、CSVに出力する」プログラムがあるとします。これを現実世界に置き換えると、

(1)データの並べ替えの依頼を受ける、受付係

(2)データの並べ替えをする人

(3)CSVで出力する人

(1)~(3)のように作業を受け持つ担当ごとに(オブジェクトを)分けることができます。このように、現実世界を真似してプログラムを作成します。そして(1)~(3)のオブジェクトが連携して動作してくれます。

また(1)~(3)には責務があります。(1)の人はデータの並べ替え作業をして良いか尋ね、依頼を受ける責務を持っています。(2)の人は、データを正確に並べ替えなければいけません。そして(3)の人はCSV形式で間違えなくデータを出力する責務を持っています。

そしてオブジェクトは属性と操作(メソッド)を持っています。(2)でしたら、並べ替えをするシートの名前が属性で、データを並べ替える操作がメソッドになります。

また(1)から(2)に行動指示を送ることができます。例えば、受付の人がSheet1の並べ替の依頼を受けた場合、(2)の人にSheet1のデータの並べ替えをしてくださいと指示を出します。そして(2)の人は(3)の人に、Sheet1の内容をCSVで出力してくださいと指示を出します。

このようにオブジェクトは互いに属性を読み書きしたり、操作(メソッド)を呼び出したりして1つのプログラムとして動きます。

このように、クラスモジュールを使えるようになると、Excel VBAのプログラムが劇的に変わるので、ぜひオブジェクト指向の世界に入ってみてはいかがでしょうか。