Accessのカレンダーコントロールとは?現在の代替・日付ピッカーの使い方まで解説

概要

旧Accessで使われていたCalendar Control(MSCAL.OCX)はAccess 2010以降サポートされていません。現在は、日付/時刻型フィールドや日付用コントロールで使える標準の日付ピッカーを利用するのが基本です。古いAccessにMSCAL.OCXが残っている場合は、無理にOCXを再登録して延命するより、標準の日付ピッカーへ置き換え、関連するVBAやイベントも確認する方が保守しやすくなります。

この記事でわかること

  • 旧カレンダーコントロール(MSCAL.OCX)がどのような機能だったのか
  • Access 2010以降で旧Calendar Controlが使えなくなった理由
  • 現在のAccessで利用する日付ピッカー(Date Picker)の仕組み
  • フォームに日付ピッカーを表示するための具体的な設定手順
  • Show Date Picker(日付ピッカーの表示)と入力マスクの関係
  • 今日の日付を入力するDate()・Now()・Ctrl+;の使い分け
  • 古いAccessを改修するときのMSCAL.OCX・VBA・参照設定の確認ポイント

この記事の主な内容

1.Accessのカレンダーコントロールとは?まず30秒で理解しよう
2.Access 2010以降で旧カレンダーコントロールが使えない理由
3.現在のAccessでは日付ピッカーを使う|旧Calendar Controlとの違い
4.フォームに日付ピッカーを表示する方法
5.日付ピッカーが表示されない原因と対処方法
6.古いAccessのカレンダーコントロールを改修・移行するときの注意

7.まとめ|新規開発では標準の日付ピッカーを基本にする
8.よくある質問(FAQ)

想定読了時間:約12~15分


1. Accessのカレンダーコントロールとは?まず30秒で理解しよう

Accessで「カレンダーコントロール」と呼ばれるものには、古いAccessで使われていたCalendar Controlと、現在のAccessに標準搭載されている日付ピッカーの2つが混同されやすいという特徴があります。まず、この2つを分けて理解することが重要です。

旧Calendar Controlは、MSCAL.OCXというActiveXコントロールをフォームに配置し、月間カレンダーから日付を選択する仕組みでした。一方、現在の日付ピッカーはテキストボックスなどの日付入力欄をクリックしたときにカレンダーアイコンを表示し、必要なときだけポップアップで日付を選択する標準機能です。

Accessの旧Calendar Control(MSCAL.OCX)とフォーム上のカレンダー表示イメージ
30秒でまとめると
旧Calendar Control=フォーム上に配置するMSCAL.OCXベースの外部コントロール。現在の日付ピッカー=日付入力欄から呼び出すAccess標準機能。新しいAccessでは後者を使うのが基本です。

旧Calendar Controlが使われていた場面

例えば、受注日、予約日、入社日、請求日などをフォームで入力するとき、利用者に日付を直接キーボード入力させるより、カレンダーから選んでもらう方が入力ミスを減らしやすくなります。旧Calendar Controlは、そのためにフォーム上へ常時カレンダーを表示する用途で使われていました。

ただし、現在のAccessで同じ操作性を実現するためにMSCAL.OCXを復活させる必要はありません。日付入力欄に標準の日付ピッカーを組み合わせれば、多くの業務では十分に対応できます。


2. Access 2010以降で旧カレンダーコントロールが使えない理由

MicrosoftはAccess 2010でCalendar Control(mscal.ocx)のサポートを終了しました。Microsoftの案内では、Calendar Controlを含むフォームをAccess 2010で開くとコントロールが表示されず、参照が見つからない、または壊れていることを示すエラーが発生する場合があるとされています。

そのため、古いAccessファイルを新しいOffice環境へ移行した際に「カレンダー部分だけ白い」「コントロールが表示されない」「Missing Referenceのようなエラーが出る」といった現象が起きることがあります。これはフォームのデザインだけの問題ではなく、外部OCXへの依存が残っている可能性を示しています。

Accessの旧MSCAL.OCXカレンダーと現在の日付ピッカーを比較した図
Access 2007以前と2010以降におけるCalendar ControlとDate Pickerの利用可否を整理した図
比較項目旧Calendar Control現在の日付ピッカー
仕組みMSCAL.OCXを使うActiveX系コントロールAccess標準の日付選択機能
表示方法フォーム上へカレンダーを配置日付欄クリック時にアイコン/カレンダー表示
Access 2010以降非サポート利用可能
外部OCX依存あり基本的になし
新規開発での推奨推奨しない基本はこちらを使用
実務上の考え方
「古いAccessで動いていたから同じOCXを探して入れる」という延命策は、端末更新や32bit/64bit移行のたびに再び問題になる可能性があります。可能であれば標準機能へ置き換え、外部依存を減らす方が長期運用に向いています。

3. 現在のAccessでは日付ピッカーを使う|旧Calendar Controlとの違い

現在のAccessでは、日付/時刻型のフィールドをフォームに配置し、その入力欄をクリックすると日付ピッカーのアイコンを表示できます。アイコンを選択するとポップアップカレンダーが開き、任意の日付をクリックして入力できます。

Microsoftの現行サポート情報では、Access for Microsoft 365、Access 2024、2021、2019、2016を対象として日付ピッカーの利用方法が案内されています。カレンダーの下にある「今日」を選べば現在の日付を入力することもできます。

Accessで旧MSCAL.OCXが表示されない・参照エラーになる典型例を整理した図
Accessの日付テキストボックスからカレンダーアイコンを開いて日付を選択する流れ

日付ピッカーは「必要なときだけ表示」できる

旧Calendar Controlはフォーム上に大きなカレンダーを常時表示する設計が多く、画面スペースを使います。対して日付ピッカーは入力欄をクリックしたときだけカレンダーを開くため、フォームをコンパクトにできます。例えば「受注日」「納品予定日」「請求日」を同じ画面に配置しても、それぞれに大きなカレンダーを置く必要はありません。

今日の日付を入力する方法は複数ある

方法入力される値向いている場面
日付ピッカーの[今日]今日の日付利用者が画面から選択したい
Ctrl + ;今日の日付キーボードで素早く入力したい
=Date()今日の日付新規レコードの既定値として自動入力したい
=Now()現在の日付+時刻作成日時・受付日時など時刻も必要
Accessで今日の日付や現在日時を入力する方法を比較した図

4. フォームに日付ピッカーを表示する方法

ここでは、既存のフォームに「受注日」のような日付入力欄を作り、日付ピッカーを表示する基本手順を確認します。操作自体は難しくありませんが、元のフィールドが日付/時刻型になっているかを最初に確認してください。

Accessフォームで日付ピッカーを表示するまでの5ステップを示した図
STEP操作確認ポイント
1テーブルに日付/時刻型フィールドを用意例:受注日、予約日、入社日
2フォームをデザインビューまたはレイアウトビューで開く対象の入力欄を選択
3F4でプロパティシートを表示フォーム全体ではなく日付入力コントロールを選ぶ
4[すべて]タブで[日付ピッカーの表示]を確認[日付の場合]に設定
5フォームビューで入力欄をクリックカレンダーアイコンが表示されるか確認

「日付ピッカーの表示」プロパティを確認する

Microsoftの日本語UIでは、プロパティシートに「日付ピッカーの表示」または近い表記で設定項目が表示されます。既定は「日付の場合」です。非表示にしたい場合は「しない」を選択します。

Accessプロパティシートで日付ピッカーの表示を日付の場合に設定する画面

また、新規レコードを作成したときに自動で今日の日付を入れたい場合は、テーブルまたはフォームの[既定値]プロパティへ `=Date()` を設定できます。時刻も必要なら `=Now()` を使います。

既定値:=Date()    
日付+時刻:=Now()

5. 日付ピッカーが表示されない原因と対処方法

日付ピッカーを設定したのにカレンダーアイコンが出ない場合は、闇雲にフォームを作り直す必要はありません。データ型、プロパティ、入力マスクなどを順番に確認すると原因を切り分けやすくなります。

Accessの日付ピッカーが表示されないときの原因を順番に確認するチェック図
確認項目よくある状態対処
データ型元フィールドが短いテキスト等になっている日付/時刻型として設計する必要があるか確認
日付ピッカーの表示「しない」になっている「日付の場合」に変更
入力マスク日付/時刻フィールドにInput Maskが設定済み入力マスクを使うとDate Pickerは利用不可
選択対象フォーム全体やラベルを選んでいる日付のテキストボックスを選択
表示書式Formatだけを日付表示にしている表示形式とデータ型は別物。元データ型を確認

入力マスクと日付ピッカーは併用できない

特に注意したいのがInput Mask(入力マスク)です。Microsoftは、日付/時刻フィールドに入力マスクを設定すると、日付ピッカーの表示プロパティの設定にかかわらずDate Pickerが利用できなくなると案内しています。

例えば「0000/00/00」のような入力形式を強制したいと考えて入力マスクを設定すると、カレンダーから選択する操作と両立しません。入力方式を「キーボード入力を厳密に制御する」のか「カレンダーで選択しやすくする」のか、運用に合わせて決める必要があります。

AccessでInput Maskを設定すると日付ピッカーが利用できなくなる関係を示した図
設計のポイント
Format(書式)は「どう表示するか」、Input Maskは「どう入力させるか」、Date Pickerは「カレンダーからどう選ばせるか」です。似た機能に見えても役割が異なるため、入力画面全体の操作性から選びます。

6. 古いAccessのカレンダーコントロールを改修・移行するときの注意

古いAccessでCalendar Controlが使われている場合は、単純にコントロールを削除して終わりとは限りません。日付を選択した後に別フィールドへ値を転記したり、カレンダーのイベントからVBAを実行したりしているケースがあるためです。

まず、フォーム上の旧Calendar Controlがどのフィールドやイベントと連動しているかを確認します。次に、標準の日付入力テキストボックス+Date Pickerへ置き換え、その後でVBA・マクロ・クエリ・帳票への影響をテストします。

MSCAL.OCXの旧カレンダーを標準Date Pickerへ置き換える流れを示した図
STEP作業確認内容
1バックアップ変更前のACCDB/MDBを保管
2MSCAL.OCX依存を確認フォーム、参照設定、ActiveX、VBAを調査
3旧Calendar Controlの処理を確認クリック/更新等のイベントと転記先を確認
4標準の日付入力へ置換日付/時刻フィールド+Date Pickerを使用
5VBA・マクロを調整旧コントロール名を参照する処理を修正
6機能テスト新規入力、修正、検索、印刷、連携を確認
7本番反映利用者テスト後に切替
Accessの旧カレンダーコントロールを安全に改修するバックアップから本番反映までの流れ
64bit移行でも外部コンポーネント依存は確認する
Calendar Controlに限らず、古いAccessではActiveXやOCX、32bit API、古い参照設定などが残っている場合があります。Office 64bit化やWindows更新を行う際は、フォーム単位ではなくデータベース全体の依存関係を調査する方が安全です。

まとめ|新規開発では標準の日付ピッカーを基本にする

Accessの旧カレンダーコントロール(MSCAL.OCX)は、以前のAccessでフォームにカレンダーを配置するために使われていました。しかし、Access 2010以降はサポートされておらず、現在のAccessで新規に利用する機能ではありません。

現在は、日付/時刻型の入力欄に標準の日付ピッカーを表示する方法が基本です。必要に応じて「今日」ボタン、Ctrl+;、Date()、Now()を使い分ければ、日付入力の多くは外部OCXに依存せず実現できます。

また、古いAccessを引き継いだ場合は、MSCAL.OCXだけを直すのではなく、関連するVBA・マクロ・参照設定・32bit依存まで確認してください。標準機能へ置き換えて依存関係を減らすことは、今後のOffice更新や64bit移行時のトラブル低減にもつながります。

そのAccess、古いカレンダーコントロールやActiveXに依存していませんか?
長期間利用しているAccessでは、MSCAL.OCXをはじめ、現在のOfficeでは利用できないActiveXやOCXへの依存が残っている場合があります。インフォースでは、既存Accessの構造・参照設定・VBAを調査し、現在のAccess環境へ合わせた改修や64bit対応を支援します。

よくある質問(FAQ)

古いAccessでMSCAL.OCXを利用し、フォーム上のカレンダーから日付を選択するために使われていたコントロールです。現在の標準日付ピッカーとは別の仕組みです。

MicrosoftはAccess 2010でCalendar Control(mscal.ocx)のサポートを終了しています。新規開発では標準の日付ピッカーを利用します。

旧Calendar Controlを提供していた外部ActiveXコンポーネントです。古いAccessファイルに依存が残っていると、新しい環境で表示エラーや参照エラーの原因になることがあります。

日付/時刻型のフィールドをフォームへ配置し、日付ピッカーの表示を「日付の場合」に設定します。入力欄をクリックするとカレンダーアイコンから日付を選択できます。

データ型、日付ピッカーの表示プロパティ、Input Maskの有無、選択しているコントロールを確認してください。

できません。Microsoftは日付/時刻フィールドに入力マスクを設定するとDate Pickerが利用できなくなると案内しています。

日付ピッカーの「今日」を選ぶか、AccessデスクトップデータベースではCtrl+;を使えます。

Date()は現在の日付、Now()は現在の日付と時刻を返します。既定値やVBAなどで用途に応じて使い分けます。

必ずしもそうではありません。旧コントロールのイベントからVBAやマクロを呼び出している場合があるため、処理の依存関係を確認する必要があります。

はい。MSCAL.OCX以外にもActiveX、OCX、API宣言、参照設定など32bit依存が残っている可能性があります。

可能です。「日付ピッカーの表示」を「しない」に設定します。

別です。日付ピッカーは入力補助、Formatは日付をどのような見た目で表示するかを決める設定です。


参考情報

Microsoft Support|Access 2010 で廃止、変更される機能
https://support.microsoft.com/ja-jp/topic/access-2010-%E3%81%A7%E5%BB%83%E6%AD%A2-%E5%A4%89%E6%9B%B4%E3%81%95%E3%82%8C%E3%82%8B%E6%A9%9F%E8%83%BD-9714e5e4-4bbc-490f-97b6-29a7730381cb

Microsoft Support|日付ピッカー コントロールを使用して今日の日付を挿入する
https://support.microsoft.com/ja-jp/access/insert-today-s-date-using-the-date-picker-control

Microsoft Support|日付と時刻のフィールドを作成または削除する
https://support.microsoft.com/ja-jp/access/create-or-delete-a-date-and-time-field

Microsoft Support|Control data entry formats with input masks
https://support.microsoft.com/en-us/access/control-data-entry-formats-with-input-masks

Microsoft Support|Introduction to data types and field properties
https://support.microsoft.com/en-us/access/introduction-to-data-types-and-field-properties

TOP