【簡単エクセル/Excel VBA マクロ】メモや議事録に日時を自動入力する|Worksheet_Change|アプリ事例 #009


いつもありがとうございます。
皆さん、こんにちは。ご覧いただきありがとうございます。
“日々の業務にちょうどいい自動化を”──
業務改善アプリケーションの作成を行っている「 ソフトデザイン工房」 です。
この記事では、「メモや議事録に日時を自動入力する」アプリを紹介します。
リアルタイムで議事録などを取っていると、手作業で毎回日時を入力するのは面倒ですよね。
しかし、効率化のためにNow関数を使用すると、ファイルを開くたびに日時が再計算されてしまい、正確な日時の記録が難しくなります。
今回はそのようなときに使いたくなるアプリを紹介します。
具体的には、「値入力セル」を更新すると、それに連動して「日時入力セル」も自動で更新されるアプリです。
このアプリは、ワークシートイベントを使用するため、中~上級者向けのものと言えるかもしれません。
この技術を習得すれば、あなたのマクロがより一層洗練されたものとなるでしょう。
この記事が、あなたのVBAマクロの価値をさらに高める一助となれば幸いです。
VBAを活用して、自分自身や身近なコミュニティに合ったアプリケーションを作成し、仕事量は半分に、成果は2倍に──そんな未来を目指すあなたを応援しています。
メモや議事録に日時を自動入力する方法

アプリの仕様
次のように、A列に何かしらデータを入力します。

そうすると、次のようにB列に日時が自動入力されます。

ワークシートイベントを利用し、A列の更新を検知して、B列に日時を書き込む仕様です。
コードの実装

このアプリは ワークシートイベント を利用しています。
そのため、標準モジュールではなく、対象ワークシートのコードモジュールにコードを記述する必要があります。
具体的には、VBE(VBAのエディター)の左上の方に表示されている対象のシートをダブルクリックし、開いたコードモジュールにコード記述 します。
Sheet1のコードモジュールに記述する場合は、これです。

このコードモジュールに記述するコードと、その実行結果を示します。
【コード】
Private Sub Worksheet_Change(ByVal Target As Range)
' 変数宣言
Dim cell As Range
' Intersect関数でA列に変更があったかを検知
If Not Intersect(Target, Me.Columns(1)) Is Nothing Then
' 一時的にイベントの検知を無効化(イベントの無限ループを防ぐ)
Application.EnableEvents = False
' A列で変更されたすべてのセルを確認し、それぞれの隣のB列に日時を入力する
For Each cell In Intersect(Target, Me.Columns(1))
' A列のセルが空白でなければ
If cell.Value <> "" Then
' 隣のB列に現在の日時を入力
cell.Offset(0, 1) = Now
' A列のセルが空白なら
Else
' B列も空白にする(データを削除する)
cell.Offset(0, 1).ClearContents
End If
Next cell
End If
' イベントの検知を再開
Application.EnableEvents = True
End Sub【実行結果】
A列に文字を入力すると、B列にその時の日時が自動で入力されます。


順を追って解説していきます。
Private Sub Worksheet_Change(ByVal Target As Range)ここでは、ワークシートイベント「Worksheet_Change」 を定義しています。
このイベントは、ワークシートのセルが変更されたときに自動的に実行されるマクロです。
Target は変更されたセルの範囲を表します。
' 変数宣言
Dim cell As Rangeここでは、コード内で使用する変数が宣言されています。
変数は Dim 変数名 As データ型 の構文で宣言します。
これにより、各変数は As 以降で指定したデータ型のデータを格納できるようになります。
具体的には、ここでは、セルの範囲を格納するための変数cell を宣言しています。
RangeはExcelシート内のセル範囲を操作するためのデータ型です。
この変数cellを使って、変更されたA列の各セルを処理します。
' Intersect関数でA列に変更があったかを検知
If Not Intersect(Target, Me.Columns(1)) Is Nothing Thenここでは、Intersect 関数を使って、変更されたセルがA列に含まれているかを判定 しています。
具体的には、Target(変更されたセルの範囲)と Me.Columns(1)(A列)に交差があれば Not Nothing となり、処理を続行します。
一方で、A列以外の変更であれば、この条件が False になり、何も処理されません。
' 一時的にイベントの検知を無効化(イベントの無限ループを防ぐ)
Application.EnableEvents = Falseここでは、イベントの無限ループを防ぐため、一時的にイベントの検知を無効化 しています。
例えば、B列に日時を入力する際、その変更が Worksheet_Change イベントを再び呼び出してしまうと無限ループになる可能性があります。
それを防ぐために Application.EnableEvents = False を設定します。
' A列で変更されたすべてのセルを確認し、それぞれの隣のB列に日時を入力する
For Each cell In Intersect(Target, Me.Columns(1))ここでは、変更されたA列のすべてのセルを順番に処理するループを開始 しています。
"変更されたA列のすべてのセル"とは、つまり、Intersect(Target, Me.Columns(1)) で取得したセルです。
For Each cell で、このセルをひとつずつ処理します。
' A列のセルが空白でなければ
If cell.Value <> "" Then
' 隣のB列に現在の日時を入力
cell.Offset(0, 1) = Now
' A列のセルが空白なら
Else
' B列も空白にする(データを削除する)
cell.Offset(0, 1).ClearContents
End Ifここでは、変更されたA列のセルの値を判定し、それに応じてB列を更新する処理 を行っています。
- A列のセルに値が入力された場合
If cell.Value <> "" Thenにより、A列のセルが空でない(値がある)と判定され、cell.Offset(0, 1) = Nowによって、隣のB列に現在の日時が入力 されます。
- A列のセルが空白の場合
Elseにより、A列のセルが空だと判定され、cell.Offset(0, 1).ClearContentsにより、B列のデータ(日時)が削除されます。
この処理によって、A列にデータを入力すると、B列に入力日時が記録され、A列のデータを削除すると、B列の日時も自動的に削除される 仕組みになっています。
' イベントの検知を再開
Application.EnableEvents = Trueここでは、無限ループを防ぐために無効化していたワークシートイベントの検知を再開 しています。
これをしないと、その後のセルの変更が Worksheet_Change イベントで検知されなくなるため、必ず最後にイベント検知を戻す必要があります。
これによって、再びイベントが通常どおり動作し、セル変更を検知できるようになります。

以上で、解説は終了です。ありがとうございました。
VBAスキルアップの参考情報
近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。
分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。
とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。
全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。
そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。
「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。
VBAのスキルアップ
VBAを学び始めるなら
入門書は、どれを選んでも大きな差はないように感じます。
どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。
もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
基礎を超えて力をつけたいなら
私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。
今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。
このレベルの本を一冊持っておくことに、損はないでしょう。
資格で能力を証明したいなら
VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。
特に「スタンダード」の方は上級者向けです。
あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。
以下の公式テキストが販売されています。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。
これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
今はAIにコードを尋ねれば、答えが返ってくる時代です。
しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。
こちらの記事でも紹介しています。もしよろしければご覧ください。
【初心者歓迎】無料相談受付中

いつもありがとうございます!
限られた時間をより良く使い、日本の生産性を高めたい──
みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。
お気軽にご相談ください。
こちらの記事でも紹介しております。
おわりに


ご覧いただきありがとうございました!
この記事では、「メモや議事録に日時を自動入力する」を紹介をいたしました。
お問い合わせやご要望がございましたら、「お問い合わせ/ご要望」フォームまたはコメント欄よりお知らせください。
この記事が皆様のお役に立てれば幸いです。
なお、当サイトでは様々な情報を発信しております。よろしければトップページもあわせてご覧ください。
この記事を書いた人
- ソフトデザイン工房|日々の業務にちょうどいい自動化を
- ■人生を追求する凡人 ■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢 ■ソフトデザイン工房運営(個人事業者) - 業務改善アプリケーションをご提供 ■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成にチャレンジ。





