You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Excel中筛选并复制当日或当周日期匹配的数据至新工作表

当然可以解决这个手动翻找的痛点!我给你两种实用方案,覆盖不同Excel版本和使用习惯:

方法一:用Excel内置函数(适合Excel 365/2021及以上版本)

这个方法不用写代码,直接用FILTER函数就能自动提取匹配数据,操作简单还能自动刷新。

假设你的原始数据工作表名叫数据源,日期列是A列(A1是表头),目标工作表分别叫当日数据当周数据

  1. 提取当日数据
    在「当日数据」工作表的A2单元格输入以下公式,按回车后会自动提取所有和今天日期匹配的行:
=FILTER(数据源!A:O, 数据源!A:A=TODAY(), "无匹配数据")
  • 解释:数据源!A:O代表要提取的全部15列数据;数据源!A:A=TODAY()是筛选条件,只保留日期等于今天的行;最后一个参数是无匹配数据时显示的提示内容。
  1. 提取当周数据
    需要先明确你的周起始日(比如周一还是周日):
  • 若周起始为周日,用WEEKNUM函数:
=FILTER(数据源!A:O, WEEKNUM(数据源!A:A,1)=WEEKNUM(TODAY(),1), "无匹配数据")
  • 若周起始为周一,用国际标准的ISOWEEKNUM函数:
=FILTER(数据源!A:O, ISOWEEKNUM(数据源!A:A)=ISOWEEKNUM(TODAY()), "无匹配数据")

注意:公式输入后会自动溢出填充所有匹配行,不用手动下拉复制,只要确保目标区域没有其他内容即可。

方法二:用VBA宏(适合所有Excel版本,支持一键更新)

如果你用的是旧版Excel(没有FILTER函数),或者想要更自动化的一键操作,VBA宏会更适合:

  1. 按下Alt + F11打开VBA编辑器,右键点击左侧的工作簿名称 → 插入 → 模块,然后粘贴以下代码:
Sub 复制当日数据()
    Dim 数据源表 As Worksheet, 目标表 As Worksheet
    Dim 最后一行 As Long, i As Long, 目标行 As Long
    
    ' 根据你的实际表名修改这里
    Set 数据源表 = ThisWorkbook.Worksheets("数据源")
    Set 目标表 = ThisWorkbook.Worksheets("当日数据")
    
    ' 清空目标表原有数据(保留表头)
    目标表.Rows("2:" & 目标表.Rows.Count).ClearContents
    
    最后一行 = 数据源表.Cells(数据源表.Rows.Count, "A").End(xlUp).Row
    目标行 = 2 ' 目标表从第2行开始填充数据
    
    ' 遍历数据源表,复制当日匹配行
    For i = 2 To 最后一行
        If 数据源表.Cells(i, "A").Value = Date Then
            数据源表.Rows(i).Copy 目标表.Rows(目标行)
            目标行 = 目标行 + 1
        End If
    Next i
    
    MsgBox "当日数据复制完成!", vbInformation
End Sub

Sub 复制当周数据()
    Dim 数据源表 As Worksheet, 目标表 As Worksheet
    Dim 最后一行 As Long, i As Long, 目标行 As Long
    Dim 当前周 As Integer, 数据周 As Integer
    
    ' 根据你的实际表名修改这里
    Set 数据源表 = ThisWorkbook.Worksheets("数据源")
    Set 目标表 = ThisWorkbook.Worksheets("当周数据")
    
    ' 清空目标表原有数据(保留表头)
    目标表.Rows("2:" & 目标表.Rows.Count).ClearContents
    
    最后一行 = 数据源表.Cells(数据源表.Rows.Count, "A").End(xlUp).Row
    目标行 = 2 ' 目标表从第2行开始填充数据
    当前周 = WorksheetFunction.WeekNum(Date, 2) ' 2代表周起始为周一,改周日的话换成1
    
    ' 遍历数据源表,复制当周匹配行
    For i = 2 To 最后一行
        If IsDate(数据源表.Cells(i, "A").Value) Then
            数据周 = WorksheetFunction.WeekNum(数据源表.Cells(i, "A").Value, 2)
            If 数据周 = 当前周 Then
                数据源表.Rows(i).Copy 目标表.Rows(目标行)
                目标行 = 目标行 + 1
            End If
        End If
    Next i
    
    MsgBox "当周数据复制完成!", vbInformation
End Sub
  1. 修改代码里的工作表名称(比如把"数据源""当日数据"换成你实际的表名),如果需要调整周起始日,把WeekNum函数的第二个参数从2改成1即可。

  2. 运行宏的方法:按下Alt + F8,选择对应的宏名称点击「执行」,或者你可以给宏添加一个按钮到快速访问工具栏,以后一键就能完成操作。

额外提醒

  • 确保原始数据的日期列是真正的日期格式,不是文本格式(可以选中日期列,右键→设置单元格格式→日期,确认格式正确)。
  • 函数方法会随数据源更新自动刷新数据;VBA方法需要重新执行宏来更新数据。

内容的提问来源于stack exchange,提问作者user3773444

火山引擎 最新活动