Excel VBA クラス 年・月・日より日付を生成
今回はExcel VBAのクラスモジュールを利用して、年・月・日より日付を生成します。
早速ですが、プロジェクトの構成は図1のようになっています。
![](https://nekoni-gohan.com/wp-content/uploads/2021/07/1.png)
標準モジュールにSampleMdl。クラスモジュールに、日付を生成するCreateDate
クラス。日付情報を保持する、DateItemクラスを作成します。
DateItemクラスは図2のようになっています。
![](https://nekoni-gohan.com/wp-content/uploads/2021/07/2.png)
日付情報を保持するため、フィールドに年を格納するyear、月を格納するmonth、
日を格納するdayを定義します。また値の設定と取得ができるように、getterと
setterを準備します。次にDateItemを使うクラスである、CreateDateクラスを
定義します。
CreateDateクラスは図3のようになります。
![](https://nekoni-gohan.com/wp-content/uploads/2021/07/3.png)
フィールドにはDateItem型のitemを持ちます。そしてgetDateメソッドで日付を
生成します。ここでポイントは、まずDate型のdatevalという変数を定義します。
そしてdatevalに日付を生成して代入します。ここで日付型でない場合は、エラー
となり、getDateメソッドはFalseを返します。正常に日付が生成されれば、
日付を戻します。
次にSampleMdlで実際に日付を生成してみましょう。図4にはsampleプロシージャと
、ユーザー定義関数として利用できるように、CreateAndGetDate関数を定義しま
した。
![](https://nekoni-gohan.com/wp-content/uploads/2021/07/4.png)
sampleプロシージャでは、まずDateItem型のインスタンスを生成し、フィールドに
年・月・日の値を設定します。次にCreateDate型のインスタンスを生成し、
フィールドにDateItem型のインスタンスをセットします。最後にgetDateメソッド
を呼び出せば日付が生成されます。結果は図5になります。不正な値がセットされると
Falseが戻るのが確認できます。
![](https://nekoni-gohan.com/wp-content/uploads/2021/07/7.png)
また図4のCreateAndGetDate関数では、引数で年・月・日を受け取りインスタンス
のフィールドに値をセットするようにしています。こうする事でシートでも日付を
生成する関数として利用できるようになります。実際に使用すると、図6のように
なります。
![](https://nekoni-gohan.com/wp-content/uploads/2021/07/6.png)
セルD1、D2、D3にCreateAndGetDate関数を呼び出し、引数に年・月・日の
入ったセルを代入します。
今回はクラスモジュールを利用し、日付を生成しました。日付を生成する際の
参考になれば幸いです。