小技集

トップ > 小技集 > 記事
小技集一覧へ
限定コンテンツ一覧へ



2026年6月26日【ID:0】

メンバー限定

【ExcelVBA】チェックボックスで完了日を自動入力

※IT予備メンバーに加入して連携すると、
一部の広告が非表示になります。


「完了したらチェックボックスにチェックを入れ、さらに完了日を入力…」
この手間を減らすため、チェックするだけで完了日が自動入力される仕組みを解説していきます。

※こちらで作成したファイルは、記事の最後にて配布しています。

チェックしたときの日付が入力されますが、チェック後に日付を直接編集することもできます。


1. 開発準備

以下のシートを元に作成していきます。

表の枠組みは、予め27行目まで(25件分)用意しています。
B列のチェックボックスは、[挿入]タブの[チェックボックス]にて作成されたものです。

今回は、チェックボックスが配置されたセル(B3~B27)を操作すると同時に処理(D列の完了日を入力)を実行する仕組みを実現します。
そのような、指定したセルを編集すると同時に何かしら処理を実行するには、シートモジュールイベントプロシージャを活用します。

シートモジュールは、対象シートのタブ上で右クリックし、[コードの表示]を選択することで表示できます。

以下のエディタ画面(VBE)が立ち上がり、対象のシートモジュールが表示されます。

「Option Explicit」はVBEの設定によっては表示されません。「Option Explicit」についての解説はこちらでは省略します。

次に、セルを編集すると同時に処理が実行される特殊なプロシージャ(イベントプロシージャ)を用意する必要があります。
そのためには、シートモジュールの左上のリストから「Worksheet」を選択します。

自動で「Worksheet_SelectionChange」というイベントプロシージャが表示されます。
このプロシージャは、対象のシート上のいずれかのセルが選択されると同時に処理が実行されるものになります。

ただ今回使用するイベントプロシージャは、セルを編集すると同時に処理が実行されるものです。
そのため、次に右上のリストから「Change」を選択します。

表示された「Worksheet_Change」というイベントプロシージャを活用します。
「Worksheet_SelectionChange」は使用しないため、削除して問題ないです。


2. コードの記述①

「Worksheet_Change」内に以下のコードを記述します。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Target.CountLarge > 25 Then Exit Sub
    
    Dim t As Range
    For Each t In Target
        If t.Row >= 3 And t.Row <= 27 And _
            t.Column = 2 And _
            t.Value = True Then
            
            Cells(t.Row, "D").Value = Date
            
        End If
    Next t
    
End Sub

では、処理内容について解説していきます。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    '省略
    
End Sub

「Worksheet_Change」というイベントプロシージャは、自動で実行されるときに、引数の「Target」に編集されたセルの情報が渡されます。
単体のセルが編集されたなら単体のセル、複数のセルが編集されたなら複数のセルの情報が渡されます。

    If Target.CountLarge > 25 Then Exit Sub

今回用意した表は、最大で25件までしかタスクを入力することができません。

そのため同時にチェックされることがあっても25件までという前提で、25件よりも多いセルが同時に編集された場合は処理を終了しています。

    Dim t As Range
    For Each t In Target
        '省略
    Next t

「Target」に含まれるセルの情報を1セルずつ受け取る用の変数(t)を用意し、「For Each」で1つずつ受け取っています。

        If t.Row >= 3 And t.Row <= 27 And _
            t.Column = 2 And _
            t.Value = True Then
            
            Cells(t.Row, "D").Value = Date
            
        End If

受け取った単体のセルに対し、行番号が3以上27以下、列番号が2、値が「True」かどうかを確認しています。
要するに、チェックボックスがチェックされたかどうかの確認になります。

チェックされたときに、そのチェックされた行のD列に日付(Date:今日)を入力しています。


3. 完成(仮)

以上の内容で、必要最低限の機能が実現できます。
用意されたチェックボックスにチェックを入れるだけで、同じ行の完了日の項目に日付が入力されます。

しかし、このままだとチェックを外したときに日付が残ってしまいます。

ということで、チェックが外されたときに同じ行の完了日の項目を空にする処理に書き換えていきます。


4. コードの記述②

以下のように、コードを書き換えます。


続きはIT予備メンバー限定です。

メンバー限定コンテンツになります。




IT予備メンバーページと連携することで内容を確認することができます。

メンバーとは


すでにメンバーの方は、
ログインして連携してから、こちらを更新すると閲覧できます。
※連携しても確認ができない場合は、少し時間を置いてご確認ください。

ログイン(新しいタブ)
※[ログイン]→[設定]→[IT予備-連携]で連携できます


パソコンで開く場合は、記事の最後に「リンクコピー」があるためご活用ください。

※IT予備メンバーに加入して連携すると、
一部の広告が非表示になります。


小技集-電子書籍販売ページ 小技集-電子書籍販売ページ
メンバー募集 メンバー募集






リンクの共有はこちらから行えます。

  リンクコピー    X Facebook はてなブックマーク Pocket
トップ > 小技集 > 記事
小技集一覧へ
限定コンテンツ一覧へ


- 人気の記事 -



- メンバー限定 [一覧] -



サイト累計閲覧数

8144334

有料動画講座
(買い切り)

Excel完全制覇


ちょっとした機能 便利ツール

トップ > 小技集 > 記事
小技集一覧へ
限定コンテンツ一覧へ