メインコンテンツへスキップ

Excelで2つの日付間のすべてのレコードを抽出するにはどうすればよいですか?

Author: Sun Last Modified: 2025-07-21

Excelでタイムスタンプ付きの大規模なデータを扱う場合、特定の2つの日付の間に該当するすべてのレコードを抽出またはフィルタリングする必要がよくあります。例えば、請求期間内の取引を分析したり、特定の月の出勤記録を確認したり、カスタム日付範囲内で記録されたエントリを調べたりすることが考えられます。関連する行を手動で検索してコピーするのは、特にデータ量が増えるにつれて、退屈で間違いやすい作業です。2つの指定された日付間のすべてのレコードを効率的に抽出することは、大幅な時間と労力の節約だけでなく、重要なエントリを見逃す可能性やデータ処理中のミスも軽減します。

A screenshot of data range in Excel for extracting records between two dates Arrow right A screenshot showing extracted records between two dates in Excel

以下では、Excelで2つの日付間のすべてのレコードを抽出するためのいくつかの実用的な方法を紹介します。各アプローチは、数式ベースでの抽出(アドイン不要)から、より便利なKutools for Excelの使用、VBAコード、そしてExcelの組み込みフィルターを使用するものまで、異なるニーズやユーザーの好みに合わせた柔軟なソリューションを提供します。

数式を使って2つの日付間のすべてのレコードを抽出する

Kutools for Excelを使って2つの日付間のすべてのレコードを抽出する good idea3

VBAを使用して2つの日付間のレコードを抽出する

Excelフィルターを使用して2つの日付間のレコードを抽出する


数式を使って2つの日付間のすべてのレコードを抽出する

Excelで数式を使用して2つの日付間のすべてのレコードを抽出するには、以下の手順に従ってください。この解決策は、特に動的な更新が必要な場合に役立ちます。元のデータセットや日付条件が変更されると、結果は自動的に更新されます。ただし、配列数式に慣れていない場合、最初の設定が少し複雑に感じられるかもしれません。データセットが非常に大きい場合、この方法は計算パフォーマンスが低下する可能性があります。

1. 新しいワークシート(例:Sheet2)を準備し、そこで日付の境界を指定し、抽出されたレコードを表示します。開始日と終了日をそれぞれセルA2とB2に入力してください。明確にするために、A1とB1に見出し(「開始日」や「終了日」など)を追加することもできます。
A screenshot of the start and end date input cells in Excel

2. Sheet2のセルC2に、Sheet1で指定された範囲内にある日付を持つ行の数を数えるための次の数式を入力します:

=SUMPRODUCT((Sheet1!$A$2:$A$22>=A2)*(Sheet1!$A$2:$A$22<=B2))

数式を入力した後、 Enterキーを押します。これにより、フィルタ条件に一致するエントリの数を把握できるため、期待される結果の数を簡単に理解できます。
A screenshot of the formula used to count matching rows between two dates

注: この数式では、Sheet1は元のデータシートを指します。$A$2:$A$22はデータ内の日付列です。自分のデータに合わせてこれらの参照を調整してください。A2B2は開始日と終了日のセルです。

3. 一致するレコードを表示するには、抽出されたリストを開始させたい空白のセルを選択します(例:Sheet2のセルA5)。次の配列数式を入力してください:

=IF(ROWS(A$5:A5)>$C$2,"",INDEX(Sheet1!A$2:A$22,SMALL(IF((Sheet1!$A$2:$A$22>=$A$2)*(Sheet1!$A$2:$A$22<=$B$2),ROW(Sheet1!A$2:A$22)-ROW(Sheet1!$A$2)+1),ROWS(A$5:A5))))

数式を入力した後、 Ctrl + Shift + Enter を押して(単にEnterではなく)、配列数式として機能させるようにします。その後、ハンドルを使って多くの列に渡って右方向にドラッグし、次に下方向にドラッグしてすべての一致する行を表示します。空白が表示されるまでドラッグを続け、これによりすべての一致するデータが抽出されたことが分かります。
A screenshot showing the extracted data using formulas

ヒント:

  • ゼロが表示された場合、これ以上一致するレコードがないことを意味します。これ以上ドラッグを続ける必要はありません。
  • 数式のINDEX(...)部分は他の列を抽出するために適応できます。他のフィールドを返したい場合は、Sheet1!A$2:A$22の部分の参照列を変更してください。
  • この数式は、複数の条件で動作するように拡張でき、または各行全体を抽出するために(各列で数式を繰り返すことによって)使用できます。

4. 一部の日付結果は5桁の数字(Excelシリアル日付番号)として表示される場合があります。これを読みやすい日付形式に変換するには、対応するセルを選択し、 ホーム タブを開き、書式設定のドロップダウンを開いて 短い日付を選択します。これにより、抽出されたデータがより明確で使いやすくなります。
A screenshot of formatted dates

注意事項:

  • 元のデータ内のすべての日付エントリが本当に日付形式であり、テキストとして保存されていないことを確認してください。そうでない場合、数式が期待通りに動作しない可能性があります。
  • データサイズが変わる場合は、配列範囲を調整してください。
  • #NUM!や#N/Aエラーが表示される場合は、空白の入力日付やソースデータの不整合を確認してください。

Kutools for Excelを使用して2つの日付間のすべてのレコードを抽出する

より簡潔でインタラクティブなソリューションを好む場合、Kutools for Excelの特定のセルを選択機能を使用すると、わずか数回のクリックで日付範囲に一致する全行を抽出することができます。これは特に、複雑なフィルタリングタスクを頻繁に処理したり、大規模なデータセットに対して一括操作を行うユーザーにとって、数式エラーのリスクを減らし、作業効率を向上させるのに役立ちます。

Kutools for Excelについて、AI 🤖を搭載し、300以上の便利な機能を提供して作業を簡素化します。

Kutools for Excelをインストール後、次の手順に従ってください。(今すぐKutools for Excelを無料ダウンロード!)

1. まず、分析および抽出したいデータセットの範囲を選択します。次に、 Kutools > Select > 特定のセルを選択 をExcelリボンから選択します。これにより、高度な選択用のダイアログウィンドウが開きます。
A screenshot showing Kutools Select Specific Cells feature

2. 特定のセルを選択ダイアログで:

  • 「行全体」オプションにチェックを入れ、一致する行全体を選択します。
  • フィルタ条件を設定します:日付列のドロップダウンリストで「より大きい」と「より小さい」を選択します。
  • 開始日と終了日を手動でテキストボックスに入力します(データの書式と一致することを確認してください)。
  • 両方の条件が一度に適用されるように、「AND」ロジックが選択されていることを確認します。
スクリーンショットをご覧ください:
A screenshot of the Select Specific Cells dialog with greater than and less than options

3. OKをクリックします。Kutoolsは即座に、指定された範囲内の日付列を持つすべての行を選択します。次に、「Ctrl + C」を押して選択された行をコピーし、新しいシートまたは別の場所に移動し、「Ctrl + V」を押して抽出された結果を貼り付けます。 Ctrl + C を押して選択された行をコピーし、新しいシートまたは別の場所に移動し、 Ctrl + V を押して抽出された結果を貼り付けます。
A screenshot showing extracted rows after using Kutools to select and copy records between two dates

ヒントと注意事項:

  • Kutoolsのアプローチでは、元のデータを変更したり、数式を書く必要はありません。
  • 日付形式の不整合がある場合、コピーする前に選択結果をプレビューします。
  • この機能を繰り返し使用したり、バッチフィルタリングジョブに使用したりします。異なる日付範囲で迅速にステップを繰り返します。
  • お使いのKutoolsのバージョンで説明されている機能が表示されない場合は、最新バージョンにアップデートして最適な互換性を得てください。

シナリオ分析:この方法は、多くの列を持つリストを管理しているユーザー、または変更される日付制限に基づいて定期的に完全なレコードを抽出する必要があるユーザーに理想的です。


VBAコード - マクロを使用して2つの指定された日付間のすべての行を自動的にフィルタリングおよび抽出する

ワークフローに2つの日付間のデータ抽出が頻繁に含まれる場合、そのプロセスを完全に自動化したい場合、VBAマクロを使用するのが賢い選択です。VBAを使用すると、ユーザーに日付列を選択させ、開始日と終了日を入力し、一致する行を自動的にフィルタリングして新しいシートにコピーできます。このアプローチは手作業の労力を節約し、ミスを減らしますが、マクロの有効化とVisual Basicエディタへのある程度の習熟が必要です。

以下は、そのようなマクロを設定する方法です:

1. 開発 > Visual BasicをクリックしてVBAエディタを開きます。新しいMicrosoft Visual Basic for Applicationsウィンドウで、挿入 > モジュールをクリックし、次のコードをモジュールにコピーして貼り付けます:

Sub ExtractRowsBetweenDates_Final()
'Updated by Extendoffice
    Dim wsSrc As Worksheet
    Dim wsDest As Worksheet
    Dim rngTable As Range
    Dim colDate As Range
    Dim StartDate As Date
    Dim EndDate As Date
    Dim i As Long
    Dim destRow As Long
    Dim dateColIndex As Long
    Dim cellDate As Variant

    Set wsSrc = ActiveSheet
    Set rngTable = Application.InputBox("Select the data table (including headers):", "KutoolsforExcel", Type:=8)
    If rngTable Is Nothing Then Exit Sub

    Set colDate = Application.InputBox("Select the date column (including header):", "KutoolsforExcel", Type:=8)
    If colDate Is Nothing Then Exit Sub

    On Error GoTo DateError
    StartDate = CDate(Application.InputBox("Enter the start date (yyyy-mm-dd):", "KutoolsforExcel", "", Type:=2))
    EndDate = CDate(Application.InputBox("Enter the end date (yyyy-mm-dd):", "KutoolsforExcel", "", Type:=2))
    On Error GoTo 0

    On Error Resume Next
    Set wsDest = Worksheets("FilteredRecords")
    On Error GoTo 0
    If wsDest Is Nothing Then
        Set wsDest = Worksheets.Add
        wsDest.Name = "FilteredRecords"
        
        rngTable.Rows(1).Copy
        wsDest.Cells(1, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        wsDest.Cells(1, 1).PasteSpecial Paste:=xlPasteFormats
    End If

    destRow = wsDest.Cells(wsDest.Rows.Count, 1).End(xlUp).Row + 1
    dateColIndex = colDate.Column - rngTable.Columns(1).Column + 1

    For i = 2 To rngTable.Rows.Count
        cellDate = rngTable.Cells(i, dateColIndex).Value
        If IsDate(cellDate) Then
            If cellDate >= StartDate And cellDate <= EndDate Then
                rngTable.Rows(i).Copy
                wsDest.Cells(destRow, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
                wsDest.Cells(destRow, 1).PasteSpecial Paste:=xlPasteFormats
                destRow = destRow + 1
            End If
        End If
    Next i

    Application.CutCopyMode = False
    wsDest.Columns.AutoFit
    MsgBox "Filtered results have been added to '" & wsDest.Name & "'.", vbInformation
    Exit Sub

DateError:
    MsgBox "Invalid date format. Please enter dates as yyyy-mm-dd.", vbExclamation
End Sub

2. マクロを実行するには、 Run button (実行)ボタンをクリックするか、 F5.

を押します。次に、ステップを完了するための指示に従います:

  1. データテーブルを選択(ヘッダーを含む)
    最初の入力ボックスが表示されたら、ヘッダ行を含むテーブル全体を選択します。OKをクリックします。
  2. 日付列を選択(ヘッダーを含む)
    2番目の入力ボックスが表示されたら、ヘッダーを含む日付列のみを選択します。OKをクリックします。
  3. 開始日と終了日を入力
    開始日を入力するよう求められます(形式:yyyy-mm-dd、例:2025-06-01)
    次に終了日を入力します(例:2025-06-30)
    それぞれの後にOKをクリックします。

FilteredRecordsという名前のワークシートが自動的に作成されます(まだ存在しない場合)。指定された開始日と終了日の間にある日付を持つ一致する行がそのシートにコピーされます。また、マクロを実行するたびに新しい一致する行が既存の結果の下に追加されます。

トラブルシューティング:

  • 何も起こらない場合、選択範囲を確認してください。無効な範囲やキャンセルされたダイアログはマクロを終了します。
  • 日付列のエントリが正しいExcel日付であることを確認してください。テキストとして保存されている場合は、正確なフィルタリングのために最初に変換してください。

シナリオ分析:このVBAソリューションは、繰り返しタスク、高度なワークフロー、または非技術ユーザーとの半自動化ソリューションを共有する際に特に価値があります。操作をさらに簡単にするためにボタンを割り当てることも可能です。


その他の組み込みExcelメソッド - Excelの組み込みフィルター機能を使用する

数式やコードを書きたくないユーザー向けに、Excelの組み込みフィルター機能は、2つの日付間の行を迅速に表示および抽出する簡単な方法を提供します。これは、時々のタスク、視覚的な確認、またはワークシートインターフェースで直接作業する必要がある場合に理想的です。ただし、日付条件やデータが変わった場合、自動的に更新されることはありません。新しいフィルタリングセッションごとにステップを繰り返す必要があります。

以下はその使用方法です:

  • 列見出しを含むデータ範囲を選択します。
  • リボンのデータタブに移動し、フィルターをクリックします。各見出しの横に小さなドロップダウン矢印が表示されます。
  • 日付列の矢印をクリックし、日付フィルター > の間...を選択します。
  • ダイアログボックスで、希望する開始日と終了日を入力します。データの日付形式と一致する形式であることを確認してください。
  • OKをクリックします。指定された範囲内の日付を持つ行だけが表示された状態になります。
  • すべての表示されている行を選択し、Ctrl + Cを押してコピーし、空いているエリアまたは別のシートに移動し、Ctrl + Vを押してフィルタリングされた結果を貼り付けます。

ヒントと注意事項:

  • この方法は、迅速かつ視覚的な確認やアドホックな抽出に最適です。
  • 日付列の形式が不整合の場合、フィルタが正確に動作することを保証するために、事前に修正してください。
  • 完了したら、フィルタをクリアしてフルデータセットを再び表示することを忘れないでください。
  • フィルタリングされた行は非表示になるだけで、削除されません。元のデータはそのまま残ります。

シナリオ分析:Excelの組み込みフィルターは、中規模なテーブルに最も適しており、数式やマクロを保存せずにサブセットをすぐにプレビューまたはコピーする必要がある場合に最適です。


トラブルシューティングとまとめの提案:

  • すべてのソリューションが正しく動作するためには、ワークシート全体で日付セルが一貫してフォーマットされていることを常に確認してください。
  • 数式やVBAを使用する場合、シートの実際の構造に合わせて列や範囲の参照を調整し、インデックスや参照エラーを回避してください。
  • 非常に大きなデータセットでのパフォーマンスに関しては、Kutoolsまたは組み込みのフィルタリングは通常、広範な配列数式と比較して速い結果を提供し、メモリ/数式計算制限を超える可能性が低くなります。
  • 予期しない空白や出力で不足しているレコードが発生した場合、日付条件、入力範囲、およびデータ形式が意図した通りに設定されていることを再確認してください。

デモ:Kutools for Excelを使用して2つの日付間のすべてのレコードを抽出する

 
Kutools for Excel: あなたの指先に 300 以上の便利なツールが集結!永久無料のAI機能をお楽しみください!今すぐダウンロード!

最高のオフィス生産性ツール

🤖 Kutools AI アシスタント: データ分析を革命化する: インテリジェント実行   |  コード生成  |  カスタム数式の作成  |  データを分析しグラフを生成  |  拡張機能を呼び出す
人気の機能: 重複を見つけてハイライトまたはマーキング   |  空白行を削除   |  データを失わずに列またはセルを統合   |   丸める ...
スーパーLOOKUP: 複数条件のVLookup    複数値のVLookup  |   複数シートの検索   |   ファジーマッチ ....
高度なドロップダウンリスト: ドロップダウンリストを迅速に作成   |  依存ドロップダウンリスト   |  マルチセレクトドロップダウンリスト ....
列管理: 特定の数の列を追加  |  列を移動  |  非表示列の可視ステータスを切り替え  |  範囲と列を比較 ...
注目の機能: グリッドフォーカス   |  デザインビュー   |   強化された数式バー    ワークブック & ワークシート管理   |  オートテキスト ライブラリ (Auto Text)   |  日付ピッカー   |  データの統合   |  セルの暗号化/復号化    リストで電子メールを送信   |  スーパーフィルター   |   特殊フィルタ (太字/斜体/取り消し線をフィルタリング...) ...
トップ15のツールセット12 のテキストツール (テキストの追加, 特定の文字を削除, ...)  |  50以上 のグラフ の種類 (ガントチャート, ...)  |  40以上の実用的な 数式 (誕生日に基づいて年齢を計算する, ...)  |  19 の挿入ツール (QRコードの挿入, パスから画像を挿入, ...)  |  12 の変換ツール (単語に変換する, 通貨変換, ...)  |  7 の統合 & セルの分割ツール (高度な行のマージ, セルの分割, ...)  |  ...さらに多く

Kutools for ExcelでExcelスキルを強化し、これまでにない効率を体験してください。 Kutools for Excelは、300以上の高度な機能を提供し、生産性を向上させ、保存時間を節約します。  最も必要な機能を入手するにはここをクリック...


Office TabはOfficeにタブインターフェイスをもたらし、作業を非常に簡単にします

  • Word、Excel、PowerPoint、Publisher、Access、Visio、Projectでタブ付きの編集と読み取りを有効にします。
  • 新しいウィンドウではなく、同じウィンドウの新しいタブで複数のドキュメントを開いて作成します。
  • 生産性を50%向上させ、毎日数百回のマウスクリックを減らします!