ユーザーフォームカレンダー機能を使って日付入力がオブジェクトエラーになる

祝日対応カレンダー コマンドボタン
祝日対応カレンダー

2018年1月当時に書いたエクセルの標準機能カレンダーコントロールに関して書いた内容が最初にあり、自作カレンダーに関しては徐々に改良しているので内容を追記しています。

エクセル2007で作成したカレンダーコントロールを、エクセル2010・2013・2016でも利用できていますが、インストールされているOfficeの内容により異なります。

この下に”もくじ”があるので、「エクセル2010以降で使う方法」をご覧ください。

自作カレンダー作成に関しては「カレンダーを作ってみよう」をご覧ください。

スポンサーリンク

かつての日付入力はカレンダーコントロールが便利だった

私自身10か月前の2017年12月まで使っていたエクセル2007。

ユーザーフォームの標準機能だった日付を入力するためのカレンダーコントロールって便利でしたね。

ところが、新しく購入したパソコンで使おうと思ったらエラーになって困ったことありませんか?

カレンダーコントロール
カレンダーコントロール
エクセルのバージョンにより使用できない

左上の画像がエクセル2007で多くの方が便利に使っていたカレンダーコントロールです。

これがエクセル2016になると、左下の画像のような表示が出て全く使えなくなってしまいます。

今まで使っていたカレンダーコントロールを組み込んだエクセルファイルが使えなくなって大パニックなんて状態でした。

まだエクセル2007を使っている方もいるかもしれないので、カレンダーコントロールについて書いていきます。

オフィス2007プロフェッショナルに付いているエクセル2007のみ使えたカレンダーコントロールなので、それ以外のエクセルでは動きません。

アップグレード版のオフィス2013プロフェッショナルやオフィス2016プロフェッショナルをインストールした場合は、現在2020年3月でも動いていますが、使用をおススメはしません。

エクセルで出納帳や顧客管理など様々な用途で日付入力をすることが多いと思いますが、繰り返し日付を入力する時などはユーザーフォームのテキストボックスに直接入力するよりもカレンダーコントロールを使うととても便利です。

なぜなら、このカレンダーコントロールを使うと表示されたカレンダーの選びたい日付をワンクリックするだけで選んだ日付が指定できるからです。

カレンダーコントロール表示追加設定

この便利なカレンダーコントロールはユーザーフォームのツールボックスから選ぶのですが、最初から用意されていませんので利用する場合は機能追加が必要です。

その前にユーザーフォームって何?Visual Basic Editor?って方は下記をご覧くださいませ。

それでは、カレンダーコントロールの機能追加方法の手順を見てみましょう。

  1. Visual Basic Editor(VBE)を開きます
  2. ツール(T)を選択
  3. その他のコントロールを選択
  4. 表示されたコントロールの追加が表示されます
  5. 利用可能なコントロールの中からカレンダーコントロールにチェックを入れてOKをクリックする

カレンダーコントロールはExcelのバージョンにより異なります

  • Excel2002/2003はMicrosoft カレンダーコントロール 11.0
  • Excel2007はカレンダーコントロール 12.0

この方法でやってみたが、カレンダーコントロールが表示されない!という場合に多いのが、ACCESSがインストールされていない、Officeパーソナルかもしれませんね。

カレンダーコントロールが表示できたら、使えるように設定をしましょう。

カレンダーコントロールのVBA設定

ユーザーフォームを新しく開いたら、コントロールよりカレンダーコントロールを貼り付けます。

そして、次にカレンダーコントロール自体をクリックして下記VBAコードを書きます。

VBAコード

Private Sub Calendar1_Click()
Range(“A1″).Value = Format(Calendar1.Value,”yyyy年mm月dd日”)
End Sub

VBA解説
  1. カレンダーがクリックされたら
  2. セルA1にクリックされた日付を入力する
  3. マクロ記録終了

上記のようにコードを書くとカレンダー上でクリックした日付をセルA1に入力されます。

このままでは、実際には使えないのでセルA1を先頭にA列の入力済みセル最終行に移動して再度日付が入力できるようにしましょう。

入力済み最終行

Private Sub Calendar1_Click()
If Intersect(ActiveCell, Range(“A:A”)) Is Nothing Then Exit Sub
ActiveCell.Value = Calendar1.Value
End Sub

次にカレンダーの形式は日付であることを指定します。

VBAコード

Private Sub UserForm_Initialize()
Calendar1.Value = Date
End Sub

【実行】となるコマンドボタン(Commandbutton1)をユーザーフォーム上に配置して、【実行ボタン】を押すと1行下へ移動するようにします。

VBAコード

Private Sub CommandButton1_Click()
ActiveCell.Offset(1, 0).Activate
End Sub

最後に【キャンセル】となるコマンドボタン(CommandButton2)配置して、【キャンセルボタン】を押すと1行上へ移動するようにします。

VBAコード

Private Sub CommandButton2_Click()
ActiveCell.Offset(-1, 0).Activate
End Sub

このコードの記述で、カレンダーコントロール機能が実践で使えるようになりました。

今となっては当時の話になってしまいますけどね。

繰り返しになりますがエクセル2010以降は使えません!

エクセル2010以降で使う方法

実際にこの方法で問題なくエクセル2016でカレンダーコントロールが使用できています。

  1. Office2007プロフェッショナルを手に入れる
  2. インストールされているOffice2013や2016をアンインストール
  3. Office2007プロフェッショナルをインストール
  4. Office2013や2016をインストール
とりっぷぼうる
とりっぷぼうる

この方法でエクセル2007で作成したカレンダーコントロールがそのままエクセル2016で2021年1月現在も使えています。

Office2007プロフェショナルのサポートは終了の為、そのまま使用することは推奨しません!

という事で、カレンダーコントロール機能が無いならば、自分でカレンダーを作ってみませんか?

スポンサーリンク

カレンダーを作ってみよう(ワークシート・VBA)祝日対応

エクセルでカレンダーを作るだけならば、様々な数式を使って作る事はができますが、カレンダーコントロールの代用として作ろうと思うとかなり大変です。

そこで、エクセル🔰でも多少のVBAの知識とエクセル関数を組み合わせることによって、比較的簡単に自作カレンダーを作ることができますよ。

ここで紹介するエクセルで作る自作カレンダーは、VBA知識が🔰レベルの時に挑戦した事例を書き綴っています。

そして多少なりともVBA知識が習得したら追記という形で、VBAコードに置き換えてできる方法を併記しています。

VBA初心者レベルでもできた自作カレンダー

欲を言えば、当月以外の日を非表示して祝日の色も変えることができれば見やすいけど、知識足りず断念しましたが、カレンダーコントロールっぽく使えるようになったので満足。

excelvba自作カレンダー
excelvba自作カレンダー

左の画像は自作カレンダーです。

エクセルVBAの初心者には、ちょっと手間になりますが組み合わせればできそう。

  1. エクセルVBA
  2. エクセル関数

エクセルVBAで理解できていない部分はエクセル関数を使ってワークシートに用意しておけば、自作カレンダーができあがりました。

2018年現在の自分自身のVBA習得レベルならばここまでが限界でした。

  1. 年・月をリストから選択して【日付表示】を押すと選んだ月のカレンダーが表示される
  2. 表示されたカレンダーから選びたい日をクリックする
  3. 決定ボタンを押すと指定したセルへ転記される
  4. 間違った時は取消ボタンを押すと直前の日付を消去

今まで作成していたエクセルではOffice2007のカレンダーコントロール機能を使っていたので、順次この自作カレンダーに差し替えて問題なく使っています。

では、実際にエクセルVBAとエクセル関数を組み合わせて自作カレンダーの作り方を次のページでご紹介します。