Skip to main content

如何在 Excel 中提取兩個日期之間的所有記錄?

Author: Sun Last Modified: 2025-07-21

在 Excel 中處理大量帶時間戳的數據時,您可能經常需要提取或篩選出落在兩個特定日期之間的所有記錄。例如,您可能希望分析某一賬單週期內的交易、審查某個月的出勤情況,或者簡單地檢查在自訂日期範圍內記錄的條目。手動搜尋並複製每個相關行既繁瑣又容易出錯,特別是在數據量不斷增加的情況下。高效地提取兩個給定日期之間的所有記錄,不僅可以節省大量時間和精力,還能減少遺漏重要條目或在數據處理過程中引入錯誤的可能性。

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 中提取兩個日期之間所有記錄的實用方法。每種方法都有其適用場景和優勢,從基於公式的提取(無需增益工具),到使用 Kutools for Excel 提高便利性,再到 VBA 代碼和 Excel 內建篩選功能——為不同需求和用戶偏好提供了靈活的解決方案。

使用公式提取兩個日期之間的所有記錄

使用 Kutools for Excel 提取兩個日期之間的所有記錄 good idea3

使用 VBA 提取兩個日期之間的記錄

使用 Excel 篩選功能提取兩個日期之間的記錄


使用公式提取兩個日期之間的所有記錄

要使用公式在 Excel 中提取兩個日期之間的所有記錄,您可以按照以下步驟操作。這種解決方案在需要動態更新時特別有用:只要原始數據集或日期條件發生變化,結果就會自動更新。然而,如果您對陣列公式不熟悉,初始設置可能會顯得稍微複雜。如果您的數據集非常大,此方法可能會導致計算性能變慢。

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 提取兩個日期之間的所有記錄

如果您更喜歡簡潔且互動性強的解決方案,Kutools for Excel 中的選擇特定單元格功能可以幫助您僅需幾次點擊即可提取符合日期範圍的整行,最大限度地減少對公式或手動設置的需求。這對於經常處理複雜篩選任務或對大型數據集執行批量操作的用戶尤其適用,因為它降低了公式錯誤的風險並加快了工作流程。

Kutools for Excel結合AI功能 ?,提供超過 300 種實用功能,簡化您的工作。

安裝 Kutools for Excel 後,請按照以下步驟操作:(立即免費下載 Kutools for Excel!)

1. 首先,選擇您希望分析和提取的數據集範圍。然後,點擊 Kutools > 選擇 > 選擇特定單元格 從 Excel 功能區中。這將打開一個高級選擇的對話窗口。
A screenshot showing Kutools Select Specific Cells feature

2. 在選擇特定單元格對話框中:

  • 勾選「整行」選項以選擇完整的匹配行。
  • 設置篩選條件:在日期列的下拉列表中選擇大於小於
  • 手動在文字框中輸入您的開始和結束日期(確保格式與您的數據匹配)。
  • 確保選擇了「並且」邏輯,以便同時應用兩個條件。
請參見截圖:
A screenshot of the Select Specific Cells dialog with greater than and less than options

3. 點擊 確定。Kutools 將立即選擇日期列落在您指定範圍內的所有行。然後,按下 Ctrl + C 複製所選行,前往空白表格或新位置,並按下 Ctrl + V 粘貼提取的結果。
A screenshot showing extracted rows after using Kutools to select and copy records between two dates

提示和注意事項:

  • 使用 Kutools 方法不需要更改原始數據或編寫任何公式。
  • 如果存在日期格式不一致的情況,在複製之前預覽選擇結果。
  • 針對重複或批量篩選任務使用該功能——快速重複不同日期範圍的操作步驟。
  • 如果您的 Kutools 版本未顯示所述功能,請更新到最新版本以獲得最佳兼容性。

場景分析:此方法非常適合管理具有多列列表的用戶,或需要根據變化的日期限制反覆提取完整記錄的用戶。


VBA 代碼 - 使用宏自動篩選並提取兩個指定日期之間的所有行

如果您的工作流程經常包括提取兩個日期之間的數據,並且希望完全自動化該過程,那麼使用 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. 選擇數據表(包括標題)
    當第一個輸入框出現時,選擇整個表格,包括標題行。點擊確定
  2. 選擇日期列(包括標題)
    當第二個輸入框出現時,僅選擇日期列,包括標題。點擊確定
  3. 輸入開始和結束日期
    系統將要求您輸入開始日期(格式:yyyy-mm-dd,例如 2025-06-01)
    然後輸入結束日期(例如 2025-06-30)
    每次輸入後點擊確定

將自動創建名為 FilteredRecords 的工作表(如果尚未存在)。匹配的行(其中日期落在開始和結束日期之間)將被複製到該工作表中。每次運行宏時,任何新的匹配行都將附加到現有結果下方。

故障排除:

  • 如果運行後沒有任何反應,請檢查您選擇的範圍——無效範圍或取消對話框將退出宏。
  • 確保您的日期列條目是真正的 Excel 日期;如果存儲為文本,請先將其轉換以進行準確篩選。

場景分析:此 VBA 解決方案對於重複性任務、高級工作流程或與非技術用戶共享半自動化解決方案特別有價值——只需分配一個按鈕即可實現更便捷的操作。


其他內建 Excel 方法 - 使用 Excel 的內建篩選功能

對於偏好簡單、互動式方法而不編寫公式或代碼的用戶,Excel 的內建篩選功能提供了一種快速查看和提取兩個日期之間行的方式。這對於偶爾的任務、視覺檢查或當您需要直接使用工作表界面時非常理想。但是,如果您的日期標準或數據發生變化,它不會自動更新——您需要為每次新的篩選會話重複步驟。

以下是使用方法:

  • 選擇您的數據範圍,確保包含列標題。
  • 前往功能區上的數據標籤,然後點擊篩選。每個標題旁邊將出現小下拉箭頭。
  • 點擊日期列的箭頭並選擇日期篩選 > 介於...
  • 在對話框中,輸入您想要的開始和結束日期。確保格式與您的數據日期格式匹配。
  • 點擊確定。只有日期在您指定範圍內的行將保持可見。
  • 選擇所有可見行,按下 Ctrl + C 複製,前往空白區域或其他工作表,並按下 Ctrl + V 粘貼篩選結果。

提示和注意事項:

  • 此方法最適合快速視覺檢查或臨時提取。
  • 如果您的日期列使用不一致的格式,請提前修正這些問題以確保篩選準確。
  • 記住,完成後清除篩選以再次顯示完整的數據集。
  • 篩選的行只是隱藏,並未刪除——您的原始數據仍然完好無損。

場景分析:Excel 的內建篩選功能最適合中等規模的表格,以及需要即時預覽或複製子集而無需保存公式或宏的情況。


故障排除與總結建議:

  • 始終確認工作表中的日期單元格格式一致,以確保所有解決方案都能正確運作。
  • 使用公式或 VBA 時,請調整列和範圍引用以匹配工作表的實際結構,避免索引或引用錯誤。
  • 對於非常大的數據集的性能,Kutools 或內建篩選通常提供更快的結果,且不太可能超出內存/公式計算限制,相比於廣泛的陣列公式。
  • 如果在輸出中遇到意外的空白或缺失記錄,請仔細檢查您的日期條件、輸入範圍和數據格式是否設置正確。

演示:使用 Kutools for Excel 提取兩個日期之間的所有記錄

 
Kutools for Excel:超過 300 種實用工具任您使用!永久免費享受AI功能!立即下載!

最佳辦公效率工具

🤖 Kutools AI 助手:基於智能執行方式革新數據分析:智能執行   |  生成代碼  |  創建自訂公式  |  分析數據並生成圖表  |  調用 Kutools 函數
熱門功能查找、標記重複值或識別重複項   |  刪除空行   |  合併列或單元格而不丟失數據   |   四捨五入無需公式 ...
高級 LOOKUP多條件 VLookup    多值 VLookup  |   多表查找   |   模糊查找 ....
高級下拉列表快速創建下拉列表   |  依賴下拉列表   |  多選下拉列表 ....
列管理器添加特定數量的列  |  移動列  |  切換隱藏列的可見狀態  |  比較區域和列 ...
特色功能網格聚焦   |  設計檢視   |   增強編輯欄    工作簿與工作表管理器   |  資源庫(自動文本)   |  日期提取器   |  合併資料   |  加密/解密儲存格    按列表發送電子郵件   |  超級篩選   |   特殊篩選(篩選粗體/斜體/刪除線...) ...
頂級 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%,每天為您減少數百次鼠標點擊!