按日期范围显示在新标签上的过滤列表

问题描述 投票:-1回答:2

Excel已经超出我的范围很长时间了,这感觉非常简单。寻找用于筛选列表的公式,但结果在新选项卡上。

[我发现的最接近的功能是此FILTER函数,但是正如该网站所阅读的那样,它是一项将于2019年发布的新功能。因此,由于我使用的是Excel 2013,因此我无权使用它。

我正在尝试过滤日期范围的字段,因此当前周中的所有条目都将被过滤到新标签页。

enter image description here

因此,在新选项卡上过滤日期为2019年10月6日至2019年10月12日的星期,将仅返回前2行。

我已经尝试了FILTER函数,不,它在MS Excel 2013中不起作用。我也查看了VLOOKUP,不是。我知道PIVOT不是我想要的。我想避免使用VBA脚本,因为这最终将由非开发人员使用。

最后过滤当前表将不符合我的目标。

excel excel-formula excel-2013
2个回答
3
投票

Advanced Filter仅复制到同一工作表。

对于公式,您可以创建相关行号的数组,并使用AGGREGATE函数和Small函数以及忽略错误的选项按顺序返回它们。

然后将其用于INDEX到数组中,并使用IFERROR来将公式向下拖移多于当前行。

例如,使用表和结构化引用:在想要结果的右上角单元格中:

=IFERROR(INDEX(Table1_2,AGGREGATE(15,6,1/((Table1_2[[Dates]:[Dates]]>=From)*(Table1_2[[Dates]:[Dates]]<=To))*ROW(Table1_2)-ROW(Table1_2[#Headers]),ROWS($1:1)),COLUMNS($A:A)),"")

向右和向下填充以填充矩阵,并且引用应自行调整。

Table更改为表的名称,或使用绝对寻址。

enter image description here

enter image description here


1
投票

这里有多条通往罗马的道路,但让我们假设此示例数据位于Sheet1

enter image description here


公式(仅作为示例)

这是我在Sheet2上的结果:

enter image description here

A2中的公式:

=IFERROR(INDEX(Sheet1!A$1:A$10,SMALL(IF((Sheet1!$A$2:$A$10>=TODAY()-WEEKDAY(TODAY(),2)+1)*(Sheet1!$A$2:$A$10<=TODAY()-WEEKDAY(TODAY())+7)=1,ROW(Sheet1!$A$2:$A$10),""),ROW(A1))),"")

注:这是一个数组公式,需要通过Ctrl Shift Enter

输入

向右拖动


AdvancedFilter(因为您似乎也对该选项感兴趣)

仅添加此选项(尽管涉及一些体力劳动)

如果您像这样设置第二张纸:

enter image description here

A2中的公式:

=">="&TEXT(TODAY()-WEEKDAY(TODAY(),2)+1,"yyyy/mm/dd")

A3中的公式:

="<="&TEXT(TODAY()-WEEKDAY(TODAY(),2)+1,"yyyy/mm/dd")

现在,从要向其中拉入数据的工作表中启动AdvancedFilter很重要。并分配适当的范围

结果看起来像:

enter image description here

要自动更新此AdvancedFilter,您需要一个简单的VBA,因此请将以下内容作为Worksheet_Change()事件粘贴到Sheet1

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng1 As Range, rng2 As Range
Dim lr1 As Long, lr2 As Long

With Sheet1
    lr1 = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range("A1:C" & lr1)
End With

With Sheet2
    lr2 = .Cells(.Rows.Count, 1).End(xlUp).Row
    If lr2 > 3 Then
        Set rng2 = .Range("A5:C" & lr2)
        rng2.ClearContents
    End If
    rng1.AdvancedFilter xlFilterCopy, .Range("A1:C3"), .Range("A5")
End With

End Sub

现在您将可以在Sheet1中添加数据,它将自动更新AdvancedFilter,这将很快。但是,如果您想远离VBA,请绝对使用我自己提供的公式,或者使用@RonRosenFeld的ListObject更为有效的方法。


enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.