フォーム上でDateTimePickerを利用する。

VBAが使えるようになると、ユーザーフォームを利用することもあると思います。しかし、ユーザーフォーム上では数値や日付をうまく受け取るコントロールがなく、テキストボックスを使うしかありません。
なんでAPIなの!? 昔は「Microsoft Date and Time Picker Control 6.0」というものがあって、利用できた場合があったのですが、これはVisual Basic 6.0の付属コントロールなので、Visual Basic 6.0がインストールされていない環境でのデザイン利用(2次配布も)はライセンス違反に当たります。 マイクロソフトの見解は「DLLは良いが、OCXはダメ」ということなので、常にOCXを操作しなければならないExcelVBAではマクロの作成元にVisual Basic 6.0がインストールされていても配布利用はできないことになります。
Visual Basic 6.0自体が相当古いもので、現在ではこの環境で作成されたプログラムが他でインストールされることもほとんどないでしょう。



ここで紹介する方法は、DLLを操作する方法ですからライセンスの問題には抵触しません。但し、コントロール(OCX)を貼り付けて利用するのと違い、プロパティの操作など解明できていないことがたくさんあるので、自由自在に扱えるわけでもありません。



もうひとつの解決策は、ユーザーフォームの持つ機能を組み合わせて「カレンダー入力用フォーム」を作成することです。
1から作るのは結構大変ですが、これは作成済みのものをダウンロードさせて利用できるものなので一度ご覧下さい。
独自作成の利点では日本の祝日を表示できたり、左端を月曜日にしたりできることもあります。
さらにカレンダー機能を手早く実現できるようにワークシートからの呼び出し専用ですが「カレンダー入力用フォーム:アドイン版」も用意しました。

本件は、私にとっては2000年以前からの課題であり実現できていないものでした。当時、Excelに関するメーリングリスト「ExcelUserClub(MOUGの前身)」に質問を投げ掛けており、青山彩さんという方からかなり明快な解答をいただいていたのも関わらず、自分のAPIに関する技量のなさから約5年も実現せずにいたものです。
このHPの立ち上げ(2003)の件と、当時の新しい業務のシステムをExcelで作成するのにユーザーフォームで日付入力が数件ある事例にあったこともあり、以前のメールを再読して何とか実現することができました。
DateTimePickerをユーザーフォームで使う
このように、ユーザーフォームの日付入力の項目にInternetExplorerのコモンコントロールの「DateTimePicker」を利用することができます。



本件は、「ダウンロード」「日付入力のクラス(組み込みモジュール)」でダウンロードできますので、そちらに利用方法等を説明しています。