Skip to main content

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

Author: Sun Last Modified: 2025-08-06

在 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. 某些日期結果可能會顯示為五位數字(Excel 序列日期數字)。要將它們轉換為可讀的日期格式,請選擇相應的單元格,前往 Home 標籤,打開格式下拉選單,並選擇 Short Date。這將使提取的數據更加清晰且更易於使用。
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. 點擊 OK。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. 點擊 Developer > Visual Basic 打開 VBA 編輯器。在新的 Microsoft Visual Basic for Applications 窗口中,點擊 Insert > Module,然後將以下程式碼複製並粘貼到 Module 中:

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 (Run) 按鈕或按下 F5.

然後按照提示完成步驟:

  1. 選擇數據表(包括標題)
    當第一個輸入框出現時,選擇整個表格,包括標題行。點擊 OK
  2. 選擇日期列(包括標題)
    當第二個輸入框出現時,僅選擇日期列,包括標題。點擊 OK
  3. 輸入開始和結束日期
    系統會要求您輸入開始日期(格式:yyyy-mm-dd,例如 2025-06-01)
    然後輸入結束日期(例如 2025-06-30)
    每次輸入後點擊 OK

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

故障排除:

  • 如果運行後什麼也沒發生,請檢查您選擇的範圍——無效的範圍或取消的對話框將退出宏。
  • 確保您的日期列條目是真正的 Excel 日期;如果存儲為文本,則先將其轉換以實現準確篩選。

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


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

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

以下是使用它的方法:

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

提示和注意事項:

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

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


故障排除和總結建議:

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

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

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

最佳 Office 辦公效率工具

🤖 Kutools AI Aide:徹底革新數據分析,基於智能執行|生成程式碼|創建自訂公式|分析數據並生成圖表|調用 Kutools Functions
熱門功能查找、選取項目的背景色或標記重複值 | 刪除空行 | 合併列或單元格且不丟失資料 | 四捨五入...
高級 LOOKUP多條件查找|多值查找|多表查找|模糊查找...
高級下拉列表快速創建下拉列表 | 關聯下拉列表 | 多選下拉列表 ...
列管理器添加指定數量的列 | 移動列 | 切換隱藏列的可見狀態 | 區域與列比較 ...
精選功能網格聚焦 | 設計檢視 | 增強編輯欄 | 工作簿及工作表管理器 | 資源庫 (自動文本) | 日期提取器 | 合併資料 | 加密/解密儲存格 | 按清單發送電子郵件 | 超級篩選 | 特殊篩選(篩選粗體/傾斜/刪除線 ...)...
前15 大工具集12 款文本工具添加文本刪除特定字符,...)|50+ 種圖表 類型甘特圖,...)|40+ 實用 公式基於生日計算年齡,...)|19 款插入工具插入QR码按路徑插入圖片,...)|12 款轉換工具金額轉大寫匯率轉換,...)|7 款合併和分割工具高級合併行分割儲存格,...)| ...以及更多
使用 Kutools 支援你的語言——支援英語、西班牙語、德語、法語、中文及40 多種語言!

利用 Kutools for Excel 大幅提升你的 Excel 技能,感受前所未有的高效體驗。 Kutools for Excel 提供超過300 項高級功能,助你提升效率並保存時間。 點此查看你最需要的功能...


Office Tab 為 Office 帶來標籤式介面,讓你的工作更加輕鬆

  • 啟用 Word、Excel、PowerPoint 的標籤式編輯和閱讀功能
  • 在同一個視窗的標籤中打開和創建多個文件,而不是在新窗口中分開開啟。
  • 可提升你50% 的工作效率,每天為你大量減少滑鼠點擊次數!