Excel已经超出我的范围很长时间了,这感觉非常简单。寻找用于筛选列表的公式,但结果在新选项卡上。
[我发现的最接近的功能是此FILTER函数,但是正如该网站所阅读的那样,它是一项将于2019年发布的新功能。因此,由于我使用的是Excel 2013,因此我无权使用它。
我正在尝试过滤日期范围的字段,因此当前周中的所有条目都将被过滤到新标签页。
因此,在新选项卡上过滤日期为2019年10月6日至2019年10月12日的星期,将仅返回前2行。
我已经尝试了FILTER函数,不,它在MS Excel 2013中不起作用。我也查看了VLOOKUP,不是。我知道PIVOT不是我想要的。我想避免使用VBA脚本,因为这最终将由非开发人员使用。
最后过滤当前表将不符合我的目标。
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
更改为表的名称,或使用绝对寻址。
这里有多条通往罗马的道路,但让我们假设此示例数据位于Sheet1
:
公式(仅作为示例)
这是我在Sheet2
上的结果:
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(因为您似乎也对该选项感兴趣)
仅添加此选项(尽管涉及一些体力劳动)
如果您像这样设置第二张纸:
A2
中的公式:
=">="&TEXT(TODAY()-WEEKDAY(TODAY(),2)+1,"yyyy/mm/dd")
A3
中的公式:
="<="&TEXT(TODAY()-WEEKDAY(TODAY(),2)+1,"yyyy/mm/dd")
现在,从要向其中拉入数据的工作表中启动AdvancedFilter
很重要。并分配适当的范围
结果看起来像:
要自动更新此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更为有效的方法。