【Excel】エクセルで日付をカレンダーから選択する(簡単に・アドイン以外の方法・入力規則・ドロップダウン)方法 | モアイライフ(more E life)

【Excel】エクセルで日付をカレンダーから選択する(簡単に・アドイン以外の方法・入力規則・ドロップダウン)方法

Excelのスキルアップ
本サイトでは記事内に広告が含まれています

エクセルで日付を入力するとき、キーボードから手入力すると表記の形式がバラついてしまうことがあります。

「2026/7/26」と入力したつもりが「2026-7-26」になっていたり、うっかり存在しない日付を打ち込んでしまったりした経験はありませんか。

そんなときにカレンダーのような画面から日付をクリックして選べたら、入力ミスもなくなり作業も楽になります。

実はエクセルには専用のアドインを追加でインストールしなくても、標準機能だけで日付をドロップダウンやカレンダー風の画面から選択できる方法がいくつも用意されています。

この記事では【Excel】エクセルで日付をカレンダーから選択する(アドイン以外の方法・入力規則・ドロップダウン)方法について解説していきます。

ポイントは

・データの入力規則(リスト)を使ったドロップダウン選択

・年月日を分けて選択しDATE関数で結合する方法

・ワークシート上に自作カレンダー表を作成する方法

・VBAでカレンダー風のユーザーフォームを作成する方法

です。

それでは詳しく見ていきましょう。

 

スポンサーリンク

エクセルで日付をカレンダーから選択する方法1【データの入力規則(リスト)でドロップダウン選択】

まずは一番手軽な方法として、データの入力規則を使ったドロップダウン選択を紹介します。

あらかじめ用意しておいた日付の一覧から選ぶだけなので、関数もマクロも一切不要です。

上の表のように、1行目をヘッダーとして「リスト元データ」という項目名を入れ、2行目以降に実際の日付を並べておきます。

この範囲をあとで入力規則の元データとして指定します。

実際にセルをクリックすると、右側に小さな下向きの矢印が表示され、そこをクリックすると候補の日付が一覧で表示されます。

設定手順

まず日付を選ばせたいセルをクリックして選択します。

次に「データ」タブから「データの入力規則」をクリックしましょう。

「設定」タブの「入力値の種類」で「リスト」を選びます。

「元の値」の欄には、先ほど用意した日付一覧のセル範囲を指定します。

直接「=$A$2:$A$6」のように入力してもいいですし、セル範囲をドラッグして選択しても構いません。

最後に「OK」をクリックすれば設定は完了です。

これで対象のセルをクリックするたびに、右側に表示される矢印から日付の候補を選べるようになります。

候補の数が多い場合は、あらかじめ半年分や1年分の日付を作成しておくと便利かもしれません。

連続した日付のリストは、先頭のセルに日付を入力してからオートフィルで下方向にドラッグすれば簡単に作成できます。

【データの入力規則のリスト機能を使えば、関数やマクロを一切使わずに日付をドロップダウン選択できる。元の値には日付が入力されたセル範囲を指定するのがポイント】

 

エクセルで日付をカレンダーから選択する方法2【年・月・日を分けてドロップダウン選択しDATE関数で結合】

方法1のようにあらかじめ日付を一つずつ用意する方法は、範囲が長期にわたると管理が大変になります。

そこで年・月・日をそれぞれ別のセルでドロップダウン選択し、最後にDATE関数で1つの日付にまとめる方法がおすすめです。

この方法なら数十年分の日付でもリストを短く保てますし、あとから年や月だけを変更するのも簡単です。

 

年・月・日のリストを用意する

まず別のシートやセル範囲に、年のリスト(2020から2030など)、月のリスト(1から12)、日のリスト(1から31)をそれぞれ作成します。

年はオートフィルで連番を作成し、月と日も同様に連番で作成すればすぐに準備できます。

この3つのリストを、方法1で紹介した入力規則の「リスト」機能を使って、それぞれ別のセルに設定しましょう。

年のセルには年のリスト範囲、月のセルには月のリスト範囲、日のセルには日のリスト範囲を指定します。

 

DATE関数で年月日を結合する

年・月・日をそれぞれドロップダウンで選択したら、DATE関数を使って1つの日付データに変換します。

DATE関数は「年」「月」「日」の3つの数値を指定すると、それを日付シリアル値として返してくれる関数です。

年のセルがA2、月のセルがB2、日のセルがC2にある場合、結合先のセルには次のように入力します。

=DATE(A2,B2,C2)

このようにDATE関数の第1引数に年、第2引数に月、第3引数に日を指定すれば、年月日がバラバラのセルからでも正しい日付データを作成できます。

数式を入力したセルの結果が数値のまま表示される場合は、セルの書式設定で表示形式を「日付」に変更してください。

D2セルに数式を入力したら、あとはD2の右下にあるフィルハンドルをダブルクリックするかドラッグするだけで、数式が自動的に下のセルへコピーされます。

1件ずつ数式を入力する必要はなく、先頭セルさえ正しく作成すればオートフィルで全行に反映できるので、非常に効率的です。

年・月・日を別々に選ぶ手間は増えますが、リストの管理がしやすくなる点は大きなメリットでしょう。

【年・月・日のリストをそれぞれ入力規則で設定し、DATE関数で結合すれば長期間の日付でも短いリストで管理できる。数式は先頭セルに入力してオートフィルでコピーするのがポイント】

 

エクセルで日付をカレンダーから選択する方法3【ワークシート上に自作カレンダー表を作成】

より視覚的にカレンダーらしく日付を選びたい場合は、ワークシート上に自分でカレンダー表を作ってしまう方法があります。

この方法はアドインもマクロも使わず、関数の組み合わせだけで実現できるのが特徴です。

基準となる年月を入力するセルを1つ用意し、そこからWEEKDAY関数やDATE関数を使ってカレンダーの各セルに日付を自動計算させます。

 

カレンダー表の作り方

まず「年」と「月」を入力するセルをそれぞれ用意します。

次にカレンダーの先頭セル(その月の1日が入るセル)に、DATE関数とWEEKDAY関数を組み合わせた数式を入力しましょう。

たとえば月初の曜日を求めるには次のような数式を使います。

=DATE(年セル,月セル,1)-WEEKDAY(DATE(年セル,月セル,1))+1

この数式は「その月の1日を含む週の日曜日」を求めるものです。

先頭セルにこの数式を入力したら、右隣のセルには先頭セルに1を足すだけの数式を入れ、それを列方向と行方向にオートフィルでコピーしていけば、7列×6行程度のカレンダー表が自動的に完成します。

表示形式をユーザー定義で「d」だけにしておけば、日付シリアル値のまま日にちの数字だけを表示できます。

 

このように条件付き書式を組み合わせれば、今日の日付だけを色付けして目立たせることもできます。

あとはカレンダー内の数字が入ったセルをクリックして、その値を目的のセルに数式で参照させれば、見た目はカレンダーそのままに日付を選択している感覚が得られます。

関数だけで完結する方法なので、マクロを有効にできない職場環境でも安心して使えるでしょう。

【DATE関数とWEEKDAY関数を組み合わせれば、ワークシート上に自作のカレンダー表を作成できる。条件付き書式で今日の日付を強調すると、より使いやすいカレンダーになる】

 

エクセルで日付をカレンダーから選択する方法4【VBAでカレンダー風のユーザーフォームを作成】

もっと本格的にカレンダーらしい見た目で日付を選びたい場合は、VBAでユーザーフォームを作成する方法があります。

かつてエクセルには「Microsoft Date and Time Picker Control」というカレンダー用のコントロールが存在しましたが、64ビット版のエクセルでは正しく動作しないことが多く、セキュリティ上の理由から利用が制限されている環境も少なくありません。

そこでおすすめなのが、標準のコマンドボタンとラベルだけでカレンダーを再現する方法です。

この方法なら特別なコントロールを追加登録する必要がなく、アドインなしでも動作します。

 

ユーザーフォームの作成手順

まず「開発」タブから「Visual Basic」を開き、挿入メニューから「ユーザーフォーム」を追加します。

フォームの上部には年月を表示するラベルと、前月・翌月に移動するボタンを配置しましょう。

その下に42個(7列×6行)のコマンドボタンを並べて、1か月分の日付を表示できるようにします。

各ボタンにはコード上でループを使って「Day1」から「Day42」のような名前を付けておくと、あとでまとめて処理しやすくなります。

フォームが表示されたタイミングで、その月の1日の曜日を計算し、該当する位置のボタンから日付の数字を割り当てていくイメージです。

ボタンをクリックしたときに、そのボタンのキャプション(表示されている数字)を年月と組み合わせて日付を作成し、対象のセルに書き込む処理を記述します。

Private Sub UserForm_Initialize()
    Dim i As Integer
    Dim firstDay As Date
    Dim startPos As Integer

    lblYearMonth.Caption = Format(DateSerial(gYear, gMonth, 1), "yyyy年m月")
    firstDay = DateSerial(gYear, gMonth, 1)
    startPos = Weekday(firstDay)

    For i = 1 To 42
        Me.Controls("cmdDay" & i).Caption = ""
    Next i

    For i = 1 To Day(DateSerial(gYear, gMonth + 1, 0))
        Me.Controls("cmdDay" & (startPos + i - 1)).Caption = i
    Next i
End Sub

Private Sub cmdDay_Click(ByVal idx As Integer)
    Dim d As Integer
    d = CInt(Me.Controls("cmdDay" & idx).Caption)
    If d > 0 Then
        ActiveCell.Value = DateSerial(gYear, gMonth, d)
        Unload Me
    End If
End Sub

このコードでは、フォームが表示されたときに月初の曜日を計算してボタンに数字を割り当て、ボタンがクリックされたときにその日付をアクティブセルへ入力しています。

実際のコードでは42個のボタンそれぞれにクリックイベントを紐づける必要がありますが、クラスモジュールを使えばまとめて処理できます。

やや複雑に感じるかもしれませんが、一度作成してしまえばボタン感覚で直感的に日付を選べる本格的なカレンダーになります。

マクロを含むファイルとして保存する場合は、拡張子を「.xlsm」にすることを忘れないようにしましょう。

【コマンドボタンとラベルだけでカレンダー風のユーザーフォームを作成すれば、専用コントロールやアドインなしでも本格的な日付選択画面を実現できる。ファイルはマクロ有効ブック(.xlsm)で保存するのがポイント】

 

方法を選ぶときの考え方

ここまで4つの方法を紹介してきましたが、どれを選べばよいか迷う方もいるかもしれません。

入力する日付の範囲がそれほど広くなく、候補も限定的であれば、方法1のシンプルな入力規則リストで十分でしょう。

数年から数十年にわたる日付を扱う場合は、方法2のように年・月・日を分けてドロップダウン選択し、DATE関数で結合するほうが管理しやすくなります。

視覚的にカレンダーらしさを重視したいなら、方法3の自作カレンダー表がおすすめです。

関数だけで完結するため、マクロが使えない環境やセキュリティポリシーが厳しい職場でも導入しやすい点は大きな魅力です。

一方で、ボタンをクリックする感覚で本格的なカレンダー体験を求めるなら、方法4のVBAユーザーフォームが最も理想に近い方法だといえます。

ただしマクロを使う以上、配布先の環境でマクロが有効になっているかどうかを確認しておく必要があります。

用途や利用環境に合わせて、これらの方法を使い分けてみてください。

 

まとめ エクセルで日付をカレンダーから選択する(ドロップダウン・入力規則・アドイン以外の方法)

エクセルで日付をカレンダーから選択する方法をまとめると

・基本の方法:データの入力規則(リスト)で日付候補からドロップダウン選択する

・応用の方法:年・月・日を分けてドロップダウン選択し、DATE関数で1つの日付に結合する

・視覚重視の方法:DATE関数とWEEKDAY関数を使い、ワークシート上に自作カレンダー表を作成する

・本格的な方法:VBAでコマンドボタンを使ったカレンダー風のユーザーフォームを作成する

これらの方法はどれも専用のアドインを追加インストールする必要がなく、エクセル標準の機能とVBAだけで実現できます。

まずは手軽な入力規則のリストから試してみて、必要に応じてDATE関数を使った応用形や、VBAを使った本格的なカレンダーへとステップアップしていくとよいでしょう。

日付の入力ミスや表記ゆれに悩まされている方は、ぜひ今回紹介した方法を業務のシートに取り入れてみてください。

入力作業がぐっと楽になるはずです。

コメント

スポンサーリンク
タイトルとURLをコピーしました