跳至主要内容

如何在 Excel 中提取两个日期之间的所有记录?

Author: Sun Last Modified: 2025-07-31

在 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 功能!立即下载!

最佳 Office 办公效率工具

🤖 Kutools AI 助手:基于智能执行,彻底革新数据分析 生成代码创建自定义公式分析数据并生成图表调用 Kutools Functions
热门功能:查找、选中项的背景色或标记重复项|删除空行|合并列或单元格且不丢失数据|四舍五入(无公式)...
高级 LOOKUP多条件查找 (VLookup)多值查找 (VLookup)多表查找 (VLookup Across Multiple Sheets)模糊查找 (Fuzzy Lookup)...
高级下拉列表快速创建下拉列表依赖型下拉列表多选下拉列表...
列管理器添加指定数量的列移动列切换隐藏列的可见状态比较区域及列...
特色功能网格聚焦设计视图增强编辑栏工作簿 & 工作表管理器资源库(自动文本)|日期提取合并数据加密/解密单元格按列表发送电子邮件超级筛选特殊筛选(筛选粗体/倾斜/删除线等)...
热门15 大工具集12 款文本工具添加文本删除特定字符等)50+ 种图表 类型甘特图等)40+ 实用公式基于生日计算年龄等)19 款插入工具插入二维码按路径插入图片等)12 种转换工具小写金额转大写汇率转换等)7 款合并与分割工具高级合并行分割单元格等)...更多精彩等你发现
使用 Kutools,支持您的首选语言——包括英语、西班牙语、德语、法语、中文及40 多种其他语言!

用 Kutools for Excel 加速你的 Excel 技能,体验前所未有的高效办公。 Kutools for Excel 提供300 多项高级功能,助您提升效率,节省大量时间。点击此处,获取你最需要的功能...


Office Tab 为 Office 带来标签式界面,让你的工作更加轻松

  • 在 Word、Excel、PowerPoint 启用标签式编辑和阅读
  • 在同一窗口的新标签中打开和创建多个文档,无需新建窗口。
  • 办公效率提升50%,每天帮你减少上百次鼠标点击!