VBAで今日のデータだけを別シートに自動抽出する方法|Date関数とIsDateの使い方

VBAで今日の日付に一致する行だけを別シートに抽出するには、Date 関数で今日の日付を取得して、ループで1行ずつ比較します。毎日フィルターをかけてコピーする手間を自動化できます。

この記事では、次の内容を順番に解説します。

  • Date関数で今日の日付を取得する方法
  • 今日のデータを別シートに抽出する基本のコード
  • コードの各部分の解説

Date関数で今日の日付を取得するには?

Date はVBAの組み込み関数で、今日の日付を返します。引数は不要で、そのまま書くだけです。

Dim today As Date
today = Date  ' 今日の日付が入る(例:2025/06/01)

セルの日付と比較するときは、セルの値も Date 型として扱われるので、そのまま = で比較できます。

今日のデータを別シートに抽出するコードは?

A列に日付が入っているデータシートを前提としています。実行すると「今日データ」というシートが自動で作られ、今日の日付に一致する行がコピーされます。

Sub CopyTodayData()

    Dim sws As Worksheet  ' データシート
    Dim dws As Worksheet  ' 抽出先シート
    Dim today As Date
    Dim i As Long
    Dim j As Long
    Dim lastRow As Long

    Set sws = ThisWorkbook.Sheets("データ")
    today = Date  ' 今日の日付を取得する

    ' 「本日のデータ」シートがあれば削除して作り直す
    Application.DisplayAlerts = False
    On Error Resume Next
    ThisWorkbook.Sheets("本日のデータ").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True

    Set dws = ThisWorkbook.Sheets.Add
    dws.Name = "本日のデータ"

    ' データシートの最終行を取得する
    lastRow = sws.Cells(sws.Rows.Count, 1).End(xlUp).Row

    ' 見出し行をコピーする
    sws.Rows(1).Copy Destination:=dws.Rows(1)
    j = 2  ' 抽出先の貼り付け開始行

    ' A列の日付が今日と一致する行をコピーする
    For i = 2 To lastRow
        If IsDate(sws.Cells(i, 1).Value) Then
            If sws.Cells(i, 1).Value = today Then
                sws.Rows(i).Copy Destination:=dws.Rows(j)
                j = j + 1
            End If
        End If
    Next i

    MsgBox "今日のデータを抽出しました。"

End Sub

コードの流れ

  • today = Date で今日の日付を変数に入れます。
  • 「今日データ」シートがすでにある場合は削除して新しく作り直します。
  • 最終行を取得してから、2行目以降を1行ずつ確認します。
  • IsDate でそのセルに日付が入っているかを確認してから、today と比較します。
  • 一致した行を抽出先シートにコピーして、j を1増やして次の行に進みます。

使用前の確認ポイント

  • データシートの名前が「データ」になっているか確認してください。違う名前の場合は Sheets("データ") の部分を変更します。
  • 日付が入っている列がA列(1列目)であることを前提としています。B列なら sws.Cells(i, 1)12 に変えます。

まとめ

今日のデータを自動抽出するマクロは、日次業務の効率化に役立ちます。

  • 今日の日付の取得today = Date と書くだけ。
  • 日付の比較IsDate で日付かどうか確認してから = today で比較する。
  • 行のコピーsws.Rows(i).Copy Destination:=dws.Rows(j) で行ごとコピーする。
  • 出力先シート:毎回削除して作り直すことで、常に最新のデータだけになる。「本日のデータ」というシート名で自動作成される。

よくある質問

今日のデータが1件も抽出されない場合は?

日付の形式が合っていない可能性があります。セルの値が日付型ではなく文字列として入力されている場合、IsDate がFalseになって比較されません。セルを選択して「ホーム」タブ→「数値」グループの表示形式が「日付」になっているか確認して、日付形式に変更してから再度試してみてください。

今日ではなく特定の日付のデータを抽出したい場合は?

セルに入力した日付を読み込む方法が一番シンプルです。たとえばB1セルに「2025/06/01」と入力しておいて、today = Range("B1").Value とすれば、その日付のデータを抽出できます。コードの他の部分はそのままで大丈夫です。

抽出先のシートを毎回削除せずに追記する方法は?

シートを削除・再作成する部分を省いて、抽出先の最終行を取得してからコピーすれば追記できます。ただし、同じ日のデータが重複して追加されることがあるので、実行タイミングに注意が必要です。

日付と時刻が一緒に入っているセルでも使える?

日付と時刻が一緒に入っている場合(例:2025/06/01 09:30)は、うまく比較できないことがあります。その場合は少し追加の処理が必要になるので、まずはA列に日付だけ入っている形で使ってみてください。

複数の日付列がある場合はどうする?

条件を OrAnd で組み合わせます。たとえば「A列またはB列が今日」なら If sws.Cells(i,1).Value = today Or sws.Cells(i,2).Value = today Then のように書きます。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール