Digital_Neko

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

Excel VBA クラス 年・月・日より日付を生成

今回はExcel VBAのクラスモジュールを利用して、年・月・日より日付を生成します。
早速ですが、プロジェクトの構成は図1のようになっています。

図1プロジェクト

標準モジュールにSampleMdl。クラスモジュールに、日付を生成するCreateDate
クラス。日付情報を保持する、DateItemクラスを作成します。

DateItemクラスは図2のようになっています。

図2 DateItemクラス

日付情報を保持するため、フィールドに年を格納するyear、月を格納するmonth、
日を格納するdayを定義します。また値の設定と取得ができるように、getterと
setterを準備します。次にDateItemを使うクラスである、CreateDateクラスを
定義します。

CreateDateクラスは図3のようになります。

図3 CreateDateクラス

フィールドにはDateItem型のitemを持ちます。そしてgetDateメソッドで日付を
生成します。ここでポイントは、まずDate型のdatevalという変数を定義します。
そしてdatevalに日付を生成して代入します。ここで日付型でない場合は、エラー
となり、getDateメソッドはFalseを返します。正常に日付が生成されれば、
日付を戻します。

次にSampleMdlで実際に日付を生成してみましょう。図4にはsampleプロシージャと
、ユーザー定義関数として利用できるように、CreateAndGetDate関数を定義しま
した。

図4 SampleMdl

sampleプロシージャでは、まずDateItem型のインスタンスを生成し、フィールドに
年・月・日の値を設定します。次にCreateDate型のインスタンスを生成し、
フィールドにDateItem型のインスタンスをセットします。最後にgetDateメソッド
を呼び出せば日付が生成されます。結果は図5になります。不正な値がセットされると
Falseが戻るのが確認できます。

図5 sampleプロシージャ結果

また図4のCreateAndGetDate関数では、引数で年・月・日を受け取りインスタンス
のフィールドに値をセットするようにしています。こうする事でシートでも日付を
生成する関数として利用できるようになります。実際に使用すると、図6のように
なります。

図6 シートで日付を生成

セルD1、D2、D3にCreateAndGetDate関数を呼び出し、引数に年・月・日の
入ったセルを代入します。

今回はクラスモジュールを利用し、日付を生成しました。日付を生成する際の
参考になれば幸いです。