【配布】エクセルで作る自動計算 資格試験スケジュール表 【随時改良中の為ご意見ご要望受付中】
スポンサーリンク

エクセルで日付を入れたら試験日までカウントしてくれるスケジュール表 完成図(ひな形)

 

試験日カウントエクセルダウンロード

↑こちらのExcelはマクロ仕様となっております。

Sponsored Link

ご意見・要望などはこちらへ

    エクセル試験スケジュール表

    概要

     

    コンセプトとして日付を入れたらなるべく自動で試験日までバーッとだしてくれるエクセル。

    なるべく見やすく、なるべく具体的に、なるべく簡素に、なるべく合格率を上げる。等を考慮して作成。

    このエクセル表はひな形であり、そのまま使う事も可能だがあくまで私の感覚で一区切りの所で作成したのでご要望、改善があれば連絡してもらえば改善予定です。(時間があれば・・)

     

    使い方はいたってシンプル。入力する所は3点

     

    ①今月の入力・・・今月を入力してください。 記入方法は 「2025/7」 等、 「西暦/月」で入力してください。そうするとB列が勝手にその月の日付を自動入力してくれます。

    ②試験日・・・試験日を入力してください。そうするとE列に試験日までのカウントをしてくれます。

    ③学習時間・・・日々学習した時間を入力してください。そうするとD2に総時間が表示されます。

    A1にはわかりやすいように試験名を記述。ここは特に計算式は関与していません。

     

    作り方解説(個人で作成や改造したい方等向け)

     

    B列 日付を自動で並べる関数

    B5セルに以下の関数を入力

    B5に下記のコードを入れるだけでA2を参照し、自動で月末まで日付を列挙します。

    B5コード

    =LET(
    base, DATE(YEAR(A2), MONTH(A2), 1),
    days, SEQUENCE(DAY(EOMONTH(base, 0)), 1, base, 1),
    days
    )

    C列 曜日を自動で並べる関数

    C5セルに以下の関数を入力

    C5に下記のコードを入れるだけでA2を参照し、自動で月末まで曜日を列挙します。

    C5コード

    =LET(
    base, DATE(YEAR(A2), MONTH(A2), 1),
    days, SEQUENCE(DAY(EOMONTH(base,0)), 1, base, 1),
    TEXT(days, "aaaa")
    )

     

    C列 曜日の土曜日曜を赤色にする書式設定

     

    見やすくする為に、土日を赤色にします。

     

    土日を判別して色付け

     

    「ホーム」-「条件付き書式」-「新しいルール」をクリック。

    数式を使用して、書式設定するセルを決定。

    条件式

    =OR(C5="土曜日", C5="日曜日")

    注意として、開始列(この場合C5)を起点とするので、ここは厳密にC○とご自身の開始行を指定。このエクセルの場合はC5から始まっているのでC5です。

    となります。フォントの色は好きな色を選んでください。

     

    書式ルールの範囲も

    書式ルールの範囲

    =$C$5:$C$35

    =$C$5:$C$35 と範囲を指定してください。 条件式のC5に合わせた開始範囲となります。

     

     

    B列 今日の場所(セル)を黄色に色付け

     

    見やすくする為に本日を黄色で色付けします。

     

    本日を判定して色付け
    「ホーム」-「条件付き書式」-「新しいルール」をクリック。
    数式を使用して、書式設定するセルを決定。
    本日を色付け書式ルール

    =B2=TODAY()

     

     

    書式範囲

    =$B$2:$B$35

     

     

    試験日までの残日数の数字部分を 「赤字+太字」 にして試験日までのカウントをE列に列挙 (VBA)

     

    ここが少し面倒な記述とロジックになります。

    試験日までのカウント及び残日数を 「赤字・太字」にするVBAは通常の記述でOKなのですが、今回はA2の値を拾って「自動更新」という仕様にするため

    A2セルの内容が変わった場合、自動でその年月に合わせた日付を自動で列挙する仕組みとなっています。

    したがって、赤字・太字だけの単独VBAだけではそういった事はできません。

    VBAの仕組みポイント

    自動更新のトリガーは「D1セルの変更」だけに限定されています。

    よって、A2セルを変更しても何も起きません。

    したがって、「A2を変更したら自動で再計算する」ようにする為に、
    以下のように Worksheet_Change イベントを拡張して、A2の変更にも反応させるプライベート・ショートモジュールにする必要があります。

    つまり標準モジュールでは作成しないという事です。

    ですので標準モジュールではなく当該シートのワークシートにVBAコードを記述します。

    作り方

    マクロ作成画面を開きます。 「ALTキー」 + 「F11」

    コードは以下の通りとなります。

     

    VBAコード

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("D1,A2")) Is Nothing Then
    Application.EnableEvents = False
    Call 試験日カウント更新
    Application.EnableEvents = True
    End If
    End Sub

    Private Sub 試験日カウント更新()
    Dim 試験日 As Date
    Dim 表示日 As Date
    Dim 残日数 As Long
    Dim 行 As Long
    Dim メッセージ As String
    Dim 対象セル As Range

    If Not IsDate(Me.Range("D1").Value) Then Exit Sub
    試験日 = Me.Range("D1").Value

    For 行 = 4 To 35
    If IsDate(Me.Cells(行, "B").Value) Then
    表示日 = Me.Cells(行, "B").Value
    Set 対象セル = Me.Cells(行, "E")

    残日数 = DateDiff("d", 表示日, 試験日)

    With 対象セル
    .Font.Color = vbBlack
    .Font.Bold = False

    If 残日数 < 0 Then .Value = "試験は終了しました" ElseIf 残日数 = 0 Then .Value = "本日が試験日です" .Font.Color = vbBlue .Font.Bold = True Else メッセージ = "試験まであと " & 残日数 & " 日です" .Value = メッセージ .Font.Color = vbBlack .Font.Bold = False ' 数字部分だけ 赤字+太字 Dim pos As Integer pos = InStr(.Value, CStr(残日数)) If pos > 0 Then
    On Error Resume Next
    With .Characters(pos, Len(CStr(残日数))).Font
    .Color = vbRed
    .Bold = True
    End With
    On Error GoTo 0
    End If
    End If
    End With
    End If
    Next 行
    End Sub

    このVBAはプライベート・ショートモジュールとなりますので標準モジュールのようにマクロ一覧には載りません!

     

    まとめ

     

    いかがだったでしょうか。

    説明が長くなりましたが、作り方は自分でカスタマイズする人以外は別に読み飛ばしてもらってもかまいません。

    要はこのようにして作りましたという解説図なだけですので、単に使い方はダウンロードだけして使っていただけばと思いますし、更に自分用に改造したい方は解説図をみて手直ししていただければと思います。

    (私もそこまでVBAが得意ではありませんので、ご指摘があれば)

     

    尚ダウンロードは自由ですし、2次配布も自由です。

     

     

    おすすめの記事