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)の1を2に変えます。
まとめ
今日のデータを自動抽出するマクロは、日次業務の効率化に役立ちます。
- 今日の日付の取得:
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列に日付だけ入っている形で使ってみてください。
複数の日付列がある場合はどうする?
条件を Or や And で組み合わせます。たとえば「A列またはB列が今日」なら If sws.Cells(i,1).Value = today Or sws.Cells(i,2).Value = today Then のように書きます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



