【VBA】今日の日付が入力されたセルを探す方法|Match関数の活用術

目次

はじめに

VBAで日付を扱う処理をしていると、「指定した範囲に今日の日付が入力されているセルがあるかどうかを判定したい」というニーズはよくあります。

私自身も、A列に連続した日付が入力されているシートにおいて、
「今日」の日付が入力されたセルの位置を特定したいと考え、その方法をVBAで実装してみました。


使用する関数:WorksheetFunction.Match

VBAには、Excel関数をそのまま使えるWorksheetFunctionという便利な機能があります。
今回使用するのは、その中のMatch関数です。

これを使うことで、A列の中にある「今日の日付」と一致するセルの位置を取得することができます。


コード例:A1〜A1000に今日の日付があるか検索

Dim find_date As Variant

find_date = WorksheetFunction.Match(CLng(Date), Range("A1:A1000"), 0)

コードの解説

CLng(Date)

  • Date関数で取得した「今日の日付」は、VBAでは**日付型(Date型)**として扱われます。
  • しかし、Match関数では**Excelシート上のシリアル値(Long型)**と一致させる必要があるため、CLng()で変換します。

Range("A1:A1000")

  • 検索対象範囲をA1からA1000に設定しています。必要に応じて変更可能です。

0(完全一致)

  • Match関数の第3引数に0を指定することで、「完全一致」モードになります。
  • 今日の日付とまったく同じ日付が入力されているセルだけを対象とします。

実行結果の例

たとえば、A列の5行目に2024/05/01という日付が入力されており、
今日の日付が同じであれば、find_dateには「5」という値が格納されます。

この「5」は範囲内(A1:A1000)の5番目という意味であり、行番号そのものではないことに注意してください。


エラー対策:今日の日付が存在しない場合の処理

Match関数は、対象が見つからないとエラーになるという特徴があります。
そのため、事前にエラーハンドリングを入れておくと安全です。

簡易的なエラーハンドリング例

Dim find_date As Variant

On Error Resume Next
find_date = WorksheetFunction.Match(CLng(Date), Range("A1:A1000"), 0)

If IsError(find_date) Then
    MsgBox "今日の日付は見つかりませんでした。"
End If

On Error GoTo 0

このようにしておけば、対象が見つからない場合でも処理が中断されることはなく、
ユーザーにメッセージを表示して次の処理に移ることが可能です。


まとめ

VBAで「今日の日付が入力されたセルを検索したい」場合には、以下のポイントを押さえることでスムーズに実装できます。

  • WorksheetFunction.Matchで検索位置を取得する
  • Date関数で今日の日付を取得し、CLng()シリアル値に変換する
  • Matchの第3引数に**完全一致(0)**を指定する
  • 対象が見つからなかった場合のエラーハンドリングも忘れずに

このテクニックを活用すれば、日付をキーにした自動化処理がよりスマートに構築できるようになります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次