“今日”のデータをすぐに取り出したい
日々の業務で、売上や対応履歴、申請内容などをExcelに記録している方は多いと思います。
その中で「今日登録されたデータだけを確認したい」というニーズはよくあります。
たとえば、
- 日次の売上集計をしたいとき
- 本日の申請内容をピックアップしたいとき
- 1日の対応状況だけを抽出したいとき
こういった場合、毎回フィルターを使って手作業でコピー&貼り付けをしていては手間もかかりますし、ミスも増えます。
そこで今回は、“今日の日付”に一致する行だけを自動で抽出し、別シートに移すマクロを紹介します。
実装するマクロの全体像
このマクロでは次のような処理を行います。
- 元データシートから、今日と一致する日付の行を探す
- 抽出した行を、新しく作成した”抽出結果”シートにコピー
- 見出し行も含めてコピーする
具体的なコードと解説
まずは、実際のコードを見てみましょう。
Sub CopyTodayData()
Dim sws As Worksheet
Dim dws As Worksheet
Dim today As Date
Dim i As Long, 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
コードの解説
Date関数は、システムの日付(今日)を取得します。※todayは変数であり、これで「今日」という日付を表すことはできません。あくまで、変数です。IsDateで、セルの値が日付であるかを確認します。sws.Rows(i).Copyを使って、行全体を丸ごとコピーします。- 出力先シートが存在する場合は一度削除して、新たに作成し直します。
このマクロでは、A列に日付があることを前提としています。実際のデータ構成に応じて調整してください。
「Date」が今日という日を表すVBA上の関数です。
実装のメリット
このマクロを導入することで、次のようなメリットがあります。
- 日付フィルターの手作業が不要になる
- 抽出ミスがなくなる
- 瞬時に「今日だけの一覧」が確認できる
- 日報や報告資料の作成が効率化される
まとめ
「今日のデータだけを確認したい」というニーズは多くの業務で発生します。
この処理をVBAで自動化しておくことで、
- 作業効率が格段にアップ
- 毎日のルーティンが安定化
- 属人化せずに業務を仕組み化
という効果が得られます。
単なる手間の削減だけでなく、業務の見える化やスピードアップにもつながりますので、ぜひ活用してみてください。
