公式化地sortingexcel数据

与我组织的组策略设置强迫用户明确单击以启用办公室文件中的macros,我想要一个解决方法,以使用vba实现相同的结果(而不必点击任何东西作为额外的奖金)。 数据透视表也是不可能的。

我有一个工作表的位置列标题(A1:E1)和事件作为行标题(A2:A50)。 剩余的单元格(B2:E50)填充date,表示每个位置的下一个事件何时将被保留。 不是所有的地点都服务于每个事件,所以“N / A”是可能的。 事件可能在同一天在同一地点举行。

事件数据:

我的目标是提供显示每个位置(列标题)下方当前和下个月即将发生的事件(作为行条目)的数据的二级视图。 这是(相对)足够简单的数组公式的上下复制。

公式: =IFERROR(INDEX(Master!$A$6:$A$15,SMALL(IF(Master!B$6:B$15<>"N/A",IF((Master!B$6:B$15<DATE(YEAR(TODAY()),MONTH(TODAY())+1,1))*(Master!B$6:B$15>=DATE(YEAR(TODAY()),MONTH(TODAY()),1)),ROW(Master!B$6:B$15)-5)),ROWS(A$3:A3))),"")

输出: 产量

但是,这些事件按照它们在主表中列出的方式列出,而不是按照我的意愿按时间顺序排列。 我在每个事件旁边添加了一个date列,但这不是可sorting的,因为数组公式使所有内容保持dynamic。

所需的输出摘录:

 Tampa 19-Jan-15 Intermediate I 24-Jan-15 Introduction 26-Jan-15 Beginner I 

即将到来的工作表中,如果A1中的January实际上是相关月份的第一个date,那么在这种情况下是1/1/2015。

如果需要,您可以自定义格式A1为“mmmm”以显示January或“mmmm-yy”以显示January-15

现在在A3中使用这个公式来得到有关月份和城市的date(作品无论是否有重复):

=IFERROR(SMALL(IF(Master!B$6:B$15>=$A$1,IF(Master!B$6:B$15<=EOMONTH($A$1,0),Master!B$6:B$15)),ROWS(A$3:A3)),"")

CTRL + SHIFT + ENTER确认并复制下来的列

注意:您不必在公式中明确排除"N/A"文本值 – 无论如何这些值都将被忽略

现在在B3中复制下来,如果你没有重复的date为特定的城市,你可以使用这个非数组公式:

=IF(A3="","",INDEX(Master!$A$6:$A$15,MATCH(A3,Master!B$6:B$15,0)))

如果您可能有重复的date,请使用此“数组公式”来代替描述

=IF(A3="","",INDEX(Master!$A$6:$A$15,SMALL(IF(A3=Master!B$6:B$15,ROW(Master!$A$6:$A$15)-ROW(Master!$A$6)+1),COUNTIF(A$3:A3,A3))))