【问题标题】:How to find data between two dates如何查找两个日期之间的数据
【发布时间】:2013-12-31 19:04:15
【问题描述】:

我不经常使用 Excel,因此我不熟悉复杂的公式。
我有一个这样的 Excel 2007 工作表:

甲乙丙 姓名 leavefrom leaveupto 马修 2013 年 3 月 7 日 2013 年 3 月 25 日 约翰 2013 年 3 月 12 日 13 年 3 月 15 日 克里 2013 年 4 月 18 日 13 年 4 月 25 日 2013 年 6 月 27 日 2013 年 7 月 3 日

我有一个单元格C10,我在其中提供日期值。如果我提供 13 年 3 月 14 日,那么它应该显示名称“约翰”和“马修”,如果我提供 13 年 4 月 19 日,它应该显示“克里”等......基本上,如果我提供日期值它应该找到在该特定日期休假的姓名。

谁能帮我找到正确的公式?

【问题讨论】:

    标签: excel excel-2007


    【解决方案1】:

    由于您暗示您可能需要返回多个名称,我建议您使用高级过滤器。查看帮助以了解如何设置它。但假设您在单元格 G1 中输入日期。您的条件范围可能看起来像(显示公式而不是那些单元格中显示的结果)

    leavefrom       leaveupto
     ="<="&D1        =">="&D1
    

    如果您需要更多帮助,请回复

    这是使用高级过滤器的图片。注意对话框中“复制到另一个位置”的选项,以及“复制到”的地址

    如果您想这样做,可以开发宏代码来自动更新高级过滤器。首先确保过滤器符合您的要求。

    这是在您的用户更改日期后运行的宏代码。看看它是否适合你。您可能需要根据您的具体情况对其进行修改。

    如果有效,您可以设置一个按钮来运行它。如果这也可行,您可以开发代码以通过适当的事件触发它,从而完全自动化。

    Option Explicit
    Sub LeaveList()
        Dim rDateCheck As Range
        Dim rSrc As Range
        Dim rCriteria As Range
        Dim rRes As Range
    
    Set rDateCheck = Range("G1") 'or wherever you have the date
        If Not IsDate(rDateCheck) Then
            MsgBox "You MUST enter a Date!"
        Exit Sub
        End If
    Set rRes = Range("I1") 'or wherever you want the results
        rRes.Resize(columnsize:=3).EntireColumn.Clear
    
    With Cells
        Set rSrc = .Find(what:="Name", after:=Cells(.Rows.Count, .Columns.Count), _
                    LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByColumns, _
                    searchdirection:=xlNext, MatchCase:=False)
        'assume LeaveTable separated from rest of sheet by at least one empty
        '   column and row
        Set rSrc = rSrc.CurrentRegion
    End With
    
    'Move Leave Table to leave room for Criteria Range
    With rSrc
        If .Row < 5 Then _
            Range(.Rows(1), .Rows(5 - .Row)).Insert shift:=xlDown
    End With
    
    'Put Criteria Range above Table
    Set rCriteria = Cells(1, rSrc.Column).Resize(2, 2)
        rCriteria.Interior.Color = vbYellow
        rCriteria(1, 1) = rSrc(1, 2)
        rCriteria(1, 2) = rSrc(1, 3)
        rCriteria(2, 1).Formula = "=""<="" & " & rDateCheck.Address
        rCriteria(2, 2).Formula = "="">="" & " & rDateCheck.Address
    
       rSrc.AdvancedFilter xlFilterCopy, rCriteria, rRes
    End Sub
    

    【讨论】:

    • 我想在另一个表格单元格中获取值,非常感谢
    • 高级过滤器的一个选项是将结果放在另一个位置。无需“就地过滤”
    • 这对我来说是一个令人兴奋的评论,你能举个例子吗,我不是 excel 专家,但很想知道......
    • 我编辑了答案以显示使用高级过滤器的示例。上面列出了公式;你可以看到它们是如何以黄色显示的。请注意如何将结果复制到另一个地方。但是您需要查看高级过滤器的帮助以了解如何正确使用它。
    • 您可以使用事件宏来触发过滤器;例如Worksheet_Change,其中 Target 是您感兴趣的日期;或者您可以将宏连接到按钮或快捷键;或两者兼有 - 一个用于日期更改;以及用于更改数据范围的按钮。
    【解决方案2】:

    如果Name 在 A1 中,则:

    =IF(AND(C$10>=B2,C$10<=C2),A2,"")
    

    在 D2 中并复制到花色可以发球。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2017-04-22
      • 2011-12-13
      • 2019-08-18
      • 2018-07-25
      • 1970-01-01
      相关资源
      最近更新 更多