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

| 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への依存が残っている可能性を示しています。


| 比較項目 | 旧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を対象として日付ピッカーの利用方法が案内されています。カレンダーの下にある「今日」を選べば現在の日付を入力することもできます。


日付ピッカーは「必要なときだけ表示」できる
旧Calendar Controlはフォーム上に大きなカレンダーを常時表示する設計が多く、画面スペースを使います。対して日付ピッカーは入力欄をクリックしたときだけカレンダーを開くため、フォームをコンパクトにできます。例えば「受注日」「納品予定日」「請求日」を同じ画面に配置しても、それぞれに大きなカレンダーを置く必要はありません。
今日の日付を入力する方法は複数ある
| 方法 | 入力される値 | 向いている場面 |
|---|---|---|
| 日付ピッカーの[今日] | 今日の日付 | 利用者が画面から選択したい |
| Ctrl + ; | 今日の日付 | キーボードで素早く入力したい |
| =Date() | 今日の日付 | 新規レコードの既定値として自動入力したい |
| =Now() | 現在の日付+時刻 | 作成日時・受付日時など時刻も必要 |

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

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

また、新規レコードを作成したときに自動で今日の日付を入れたい場合は、テーブルまたはフォームの[既定値]プロパティへ `=Date()` を設定できます。時刻も必要なら `=Now()` を使います。
| 既定値:=Date() |
|---|
| 日付+時刻:=Now() |
|---|
5. 日付ピッカーが表示されない原因と対処方法
日付ピッカーを設定したのにカレンダーアイコンが出ない場合は、闇雲にフォームを作り直す必要はありません。データ型、プロパティ、入力マスクなどを順番に確認すると原因を切り分けやすくなります。

| 確認項目 | よくある状態 | 対処 |
|---|---|---|
| データ型 | 元フィールドが短いテキスト等になっている | 日付/時刻型として設計する必要があるか確認 |
| 日付ピッカーの表示 | 「しない」になっている | 「日付の場合」に変更 |
| 入力マスク | 日付/時刻フィールドにInput Maskが設定済み | 入力マスクを使うとDate Pickerは利用不可 |
| 選択対象 | フォーム全体やラベルを選んでいる | 日付のテキストボックスを選択 |
| 表示書式 | Formatだけを日付表示にしている | 表示形式とデータ型は別物。元データ型を確認 |
入力マスクと日付ピッカーは併用できない
特に注意したいのがInput Mask(入力マスク)です。Microsoftは、日付/時刻フィールドに入力マスクを設定すると、日付ピッカーの表示プロパティの設定にかかわらずDate Pickerが利用できなくなると案内しています。
例えば「0000/00/00」のような入力形式を強制したいと考えて入力マスクを設定すると、カレンダーから選択する操作と両立しません。入力方式を「キーボード入力を厳密に制御する」のか「カレンダーで選択しやすくする」のか、運用に合わせて決める必要があります。

| 設計のポイント Format(書式)は「どう表示するか」、Input Maskは「どう入力させるか」、Date Pickerは「カレンダーからどう選ばせるか」です。似た機能に見えても役割が異なるため、入力画面全体の操作性から選びます。 |
|---|
6. 古いAccessのカレンダーコントロールを改修・移行するときの注意
古いAccessでCalendar Controlが使われている場合は、単純にコントロールを削除して終わりとは限りません。日付を選択した後に別フィールドへ値を転記したり、カレンダーのイベントからVBAを実行したりしているケースがあるためです。
まず、フォーム上の旧Calendar Controlがどのフィールドやイベントと連動しているかを確認します。次に、標準の日付入力テキストボックス+Date Pickerへ置き換え、その後でVBA・マクロ・クエリ・帳票への影響をテストします。

| STEP | 作業 | 確認内容 |
|---|---|---|
| 1 | バックアップ | 変更前のACCDB/MDBを保管 |
| 2 | MSCAL.OCX依存を確認 | フォーム、参照設定、ActiveX、VBAを調査 |
| 3 | 旧Calendar Controlの処理を確認 | クリック/更新等のイベントと転記先を確認 |
| 4 | 標準の日付入力へ置換 | 日付/時刻フィールド+Date Pickerを使用 |
| 5 | VBA・マクロを調整 | 旧コントロール名を参照する処理を修正 |
| 6 | 機能テスト | 新規入力、修正、検索、印刷、連携を確認 |
| 7 | 本番反映 | 利用者テスト後に切替 |

| 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