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

Excel-VBA作成事例

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

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

波乗りアヒル
波乗りアヒル

今年になってエクセル2016に切り替えたらオブジェクトエラーになり使えなくなって困っていませんか?

カレンダーコントロール

左上の画像がエクセル2007で使っていた、カレンダーコントロールですで、使っている方多いと思います。

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

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

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

スポンサーリンク


スポンサーリンク

日付入力はカレンダーコントロールが便利

エクセル2007のみ使える機能なので、友人のエクセル2010でも試してみましたが同じようにカレンダーコントロールは動きませんでした。

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

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

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

カレンダーコントロールの機能追加の方法は下記の通りです。

Visual Basic Editor?については下記ページに記載しています!

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

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

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

この方法でやってみたが、カレンダーコントロールが表示されない!

波乗りアヒル
波乗りアヒル

ACCESSもインストールされているパソコンでないとカレンダー機能は使えません。

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

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

ユーザーフォームを抽入したら、コントロールよりカレンダーコントロールを張り付けします。

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

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

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

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

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

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

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

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

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

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

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で使えています。

Office2007プロフェショナルのサポートは終了の為、推奨しません!

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

スポンサーリンク

カレンダーを作ってみよう

波乗りアヒル
波乗りアヒル

エクセル🔰のオジサンにはレベルが高すぎて、VBAコードだけで自作カレンダーを完成させることは無理でした。

excelvba自作カレンダー

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

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

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

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

今のレベルならばここまでが限界かな。

波乗りアヒル
波乗りアヒル

これができれば今のところ満足で使い方のイメージは…

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

欲を言えば、当月以外の日を非表示して祝日の色も変えることができれば見やすいけど、知識足りず断念。

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

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

タイトルとURLをコピーしました