跳至主要内容

如何在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 种插入 工具插入二维码根据路径插入图片等) | 12 种转换 工具小写金额转大写汇率转换等) | 7 种合并与分割 工具高级合并行分割单元格等) | 还有更多...

使用 Kutools for Excel 提升您的 Excel 技能,体验前所未有的高效。 Kutools for Excel 提供超过 300 种高级功能来提高生产力并节省时间。 单击此处获取您最需要的功能...


Office Tab 将标签式界面引入 Office,让您的工作更加轻松

  • 在 Word、Excel、PowerPoint 中启用标签式编辑和阅读
  • 在同一窗口的新标签页中打开和创建多个文档,而不是在新窗口中进行操作。
  • 将您的生产力提升 50%,每天为您减少数百次鼠标点击!