Excel formula Excel公式,无需向下拖动即可从日期列中提取唯一的不同值

Excel formula Excel公式,无需向下拖动即可从日期列中提取唯一的不同值,excel-formula,unique,array-formulas,distinct-values,Excel Formula,Unique,Array Formulas,Distinct Values,我在Calc Sheet中有一个Selected Countries表,每个单元格上都有下拉列表,允许我从“Holidays”表中选择特定的国家。我在Calc Sheet的E2单元格中编写了一个公式,用于从这些选定国家列中选择日期 =IFERROR(INDEX(HolidayList[#All],ROW(HolidayList[#All]),TRANSPOSE(MATCH(CHOOSE({1;2;3;4;5},$A$2,$A$3,$A$4,$A$5,$C$2),TRANSPOSE(Holiday

我在Calc Sheet中有一个Selected Countries表,每个单元格上都有下拉列表,允许我从“Holidays”表中选择特定的国家。我在Calc Sheet的E2单元格中编写了一个公式,用于从这些选定国家列中选择日期

=IFERROR(INDEX(HolidayList[#All],ROW(HolidayList[#All]),TRANSPOSE(MATCH(CHOOSE({1;2;3;4;5},$A$2,$A$3,$A$4,$A$5,$C$2),TRANSPOSE(HolidayList[#Headers]),0))),"")
在L列中,我编写了一个公式,用于合并选定的国家/地区日期,并创建一个具有唯一不同值且不重复的日期列

=IFERROR(SMALL(SelectedHolidays,ROW(INDIRECT("1:"&COUNT(SelectedHolidays)))),)
此公式自动列出所有日期,而无需将公式向下拖动到每个单元格。我需要有人帮我修改这个公式,以生成一个独特的独特日期列的单一列表。我不需要一个公式,我必须拖到后面的单元格

我还在NamedRanges工作表上列出了我在工作簿中创建的命名范围

这是一个附件供您阅读

编辑:

我能够编制一个独特的日期列表,而不用使用频率函数拖拽公式。但是,在公式中匹配生成的行数组中存在重复值。如何排除此数组中的值

=SMALL(MDHolidays,IF(FREQUENCY(MDHolidays,MDHolidays)>0,MATCH(MDHolidays,MDHolidays,0),""))
我们可以通过将COUNTIFSelectedHolidays、0添加到行号中,从而去掉L列中的0,即1/0/1900 =IFERRORSMALLSelectedHolidays,COUNTIFSelectedHolidays,0+行间接1:&COUNTSelectedHolidays

我们将得到一个不同的范围,添加一个附加列,例如,带有数组公式的M =IFERRORINDEXMDHolidays,MATCH0,COUNTIFM$1:M1,MDHolidays,0

我们可以通过将COUNTIFSelectedHolidays、0添加到行号中,从而去掉L列中的0,即1/0/1900 =IFERRORSMALLSelectedHolidays,COUNTIFSelectedHolidays,0+行间接1:&COUNTSelectedHolidays

我们将得到一个不同的范围,添加一个附加列,例如,带有数组公式的M =IFERRORINDEXMDHolidays,MATCH0,COUNTIFM$1:M1,MDHolidays,0,

EXCEL 365方法---------------

UNIQUE将每一行或每一列视为一个元组,然后比较每一个元组,因此当您将矩阵(如A1:C3)放入其中时,它会按行(如{A1,B1,C1}vs{A2,B2,C2})或按列(如{A1;A2;A3}vs{B1;B2;B3})来确定元组是否唯一。它不会查看每个单元格,因此您必须将单元格多路复用到单个列或行中,然后对该多路复用范围应用唯一性

下面是一个公式,您可以将其放入L2,它将根据您的XLS提供一个独特日期的动态数组,感谢您的分享,这使它更容易理解:

=LET( range, E3:I9,
       Cols, COLUMNS( range ),
       Rows, ROWS( range ),
       iSeq, SEQUENCE( Rows * Cols,,0 ),
       RowIndex, iSeq / Cols + 1,
       ColIndex, MOD( iSeq, Cols ) + 1,
       rawList, UNIQUE( INDEX( range, RowIndex, ColIndex ) ),
       SORT( FILTER( rawList, ( rawList <> "" ) * ( rawList > 0 ) ) )
      )
unique.idx是k的布尔掩码,可消除重复、空白和零日期:

= IF( ISNUMBER( MDHolidays ),
         IF( ( MATCH( MDHolidays, MDHolidays , 0 ) = k ) * ( MDHolidays <> 0 ), 
               k ) )
如果你喜欢这个结果,那么让我们做最后的清理。将MDHolidays重命名为MCHolidays merged,consolidated holidays,然后打开Name Manager并替换MDHolidays的当前dyn范围公式:=OFFSETCalc$L$2,0,0,COUNTACalc$L:$L-1,使用L2=IFERRORSOMallSelectedHolidays中当前非常好的公式,行间接1:&COUNTSelectedHolidays,。这将虚拟化这些值,以便它们不会占用任何单元空间

现在,通过打开名称管理器,使用上面M2中当前的公式创建新的MDHolidays,您可以重用旧的MDHolidays名称。要完成清理,请将L2中的公式更改为simply=MDHolidays,并删除M2中的公式

这种挑出独特的方法是由Bernd Plumhoff和Peter Bartholomew开发的。

EXCEL 365方法---------------

UNIQUE将每一行或每一列视为一个元组,然后比较每一个元组,因此当您将矩阵(如A1:C3)放入其中时,它会按行(如{A1,B1,C1}vs{A2,B2,C2})或按列(如{A1;A2;A3}vs{B1;B2;B3})来确定元组是否唯一。它不会查看每个单元格,因此您必须将单元格多路复用到单个列或行中,然后对该多路复用范围应用唯一性

下面是一个公式,您可以将其放入L2,它将根据您的XLS提供一个独特日期的动态数组,感谢您的分享,这使它更容易理解:

=LET( range, E3:I9,
       Cols, COLUMNS( range ),
       Rows, ROWS( range ),
       iSeq, SEQUENCE( Rows * Cols,,0 ),
       RowIndex, iSeq / Cols + 1,
       ColIndex, MOD( iSeq, Cols ) + 1,
       rawList, UNIQUE( INDEX( range, RowIndex, ColIndex ) ),
       SORT( FILTER( rawList, ( rawList <> "" ) * ( rawList > 0 ) ) )
      )
unique.idx是k的布尔掩码,可消除重复、空白和零日期:

= IF( ISNUMBER( MDHolidays ),
         IF( ( MATCH( MDHolidays, MDHolidays , 0 ) = k ) * ( MDHolidays <> 0 ), 
               k ) )
如果你喜欢这个结果,那么让我们做最后的清理。将MDHolidays重命名为MCHolidays merged,consolidated holidays,然后打开Name Manager并替换MDHolidays的当前dyn范围公式:=OFFSETCalc$L$2,0,0,COUNTACalc$L:$L-1,使用L2=IFERRORSOMallSelectedHolidays中当前非常好的公式,行间接1:&COUNTSelectedHolidays,。这将虚拟化这些值,以便它们不会占用任何单元空间

现在,通过打开名称管理器,使用上面M2中当前的公式创建新的MDHolidays,您可以重用旧的MDHolidays名称。要完成清理,请将L2中的公式更改为simply=MDHolidays,并删除M2中的公式

这种挑逗独特的方法是由伯纳德·普卢姆霍夫(Bernd Plumhoff)和彼得·巴塞洛缪(Peter Bartholomew)开发的


对于第一个问题,只需将单元格格式设置为m/d/yyy;;,即可隐藏零值;;。但是,您的公式可以修改以排除转置函数

=IFERROR(INDEX(HolidayList[#All],ROW(HolidayList[#All])-MIN(ROW(HolidayList[#All]))+1,MATCH(CHOOSE({1,2,3,4,5},$A$2,$A$3,$A$4,$A$5,$C$2),HolidayList[#Headers],0)),"")
对于第二个问题,请选择单元格L2:L33,因为最多有32个可能的值,请输入以下公式,然后按Ctrl+enter键

编辑

我有点困惑,为什么要使用MDHolidays而不是SelectedHolidays。在任何情况下,您都可以修改最新的公式 你已经发布如下

=IFERROR(SMALL(IF(FREQUENCY(IF(MDHolidays>0,MATCH(MDHolidays,MDHolidays,0)),ROW(MDHolidays)-MIN(ROW(MDHolidays))+1)>0,MDHolidays),ROW(INDIRECT("1:"&COUNT(MDHolidays)))),"")

对于第一个问题,只需将单元格格式设置为m/d/yyy;;,即可隐藏零值;;。但是,您的公式可以修改以排除转置函数

=IFERROR(INDEX(HolidayList[#All],ROW(HolidayList[#All])-MIN(ROW(HolidayList[#All]))+1,MATCH(CHOOSE({1,2,3,4,5},$A$2,$A$3,$A$4,$A$5,$C$2),HolidayList[#Headers],0)),"")
对于第二个问题,请选择单元格L2:L33,因为最多有32个可能的值,请输入以下公式,然后按Ctrl+enter键

编辑

我有点困惑,为什么要使用MDHolidays而不是SelectedHolidays。在任何情况下,您都可以修改最新的公式 你已经发布如下

=IFERROR(SMALL(IF(FREQUENCY(IF(MDHolidays>0,MATCH(MDHolidays,MDHolidays,0)),ROW(MDHolidays)-MIN(ROW(MDHolidays))+1)>0,MDHolidays),ROW(INDIRECT("1:"&COUNT(MDHolidays)))),"")


=IFERRORINDEXMDHolidays,MATCH0,COUNTIFM$1:M1,MDHolidays,0,需要我向下拖动公式,我不想这样做。除了上面使用“小”和“间接”的选项之外,还有其他选项吗?@sifar添加了一个编辑,但实际上不起作用,抱歉:,删除了它,不用担心。在我的帖子中查看我最近的编辑。希望您知道如何排除数组中的值。@sifar在一些附加列的帮助下,并使用小的sumif和INDEX,我也接近了所需的结果,但我在将L2:L22更改为MDHolidays时得到了值。。不过我认为Domenic想出了一个很好的解决方案。=IFERRORINDEXMDHolidays,MATCH0,COUNTIFM$1:M1,MDHolidays,0,需要我拖拽公式,这是我不想做的。除了上面使用“小”和“间接”的选项之外,还有其他选项吗?@sifar添加了一个编辑,但实际上不起作用,抱歉:,删除了它,不用担心。在我的帖子中查看我最近的编辑。希望您知道如何排除数组中的值。@sifar在一些附加列的帮助下,并使用小的sumif和INDEX,我也接近了所需的结果,但我在将L2:L22更改为MDHolidays时得到了值。。我认为Domenic提出了一个很好的解决方案。在Excel中,LET&是唯一的新函数吗?它们会在Excel 2013/2016中工作吗?啊,好的-是的,它们都是在Excel 2016之后发布的。让我们在没有辅助单元格的情况下使公式更易于管理,因此有一个解决方法。然而,围绕UNIQUE工作需要更多的努力。它需要辅助单元格tmk,或者,您可以使用VBA创建自己的版本。e、 谢谢你,马克。我希望我能。但是,这是一个xlsx工作簿,其中需要使用此公式。此外,仅对Excel 2016发布的工作进行筛选和排序-因此,即使将LET展平为公式,这对您也不起作用。我在键入最后一条注释时意外点击了RETURN,我们相互交叉-抱歉。我得看看你的新版本。另外,可能有一种更好的方法可以在没有助手范围的情况下整合MDHolidays,但我一直在寻找一种基于您已经完成的工作的权宜之计。Excel中是否有独特的新函数?它们会在Excel 2013/2016中工作吗?啊,好的-是的,它们都是在Excel 2016之后发布的。让我们在没有辅助单元格的情况下使公式更易于管理,因此有一个解决方法。然而,围绕UNIQUE工作需要更多的努力。它需要辅助单元格tmk,或者,您可以使用VBA创建自己的版本。e、 谢谢你,马克。我希望我能。但是,这是一个xlsx工作簿,其中需要使用此公式。此外,仅对Excel 2016发布的工作进行筛选和排序-因此,即使将LET展平为公式,这对您也不起作用。我在键入最后一条注释时意外点击了RETURN,我们相互交叉-抱歉。我得看看你的新版本。另外,可能有一种更好的方法可以在没有助手范围的情况下合并MDHolidays,但我正在寻找一种基于您已经完成的工作的权宜之计。请参阅我在原始帖子中的编辑…查看我编辑的帖子。我有点困惑,为什么您要使用MDHolidays,而不是SelectedHolidays。在任何情况下,你都可以修改你发布的最新公式如下。。。是的,除了这个,我没有其他的解决办法。谢谢你的解决方案。唯一的问题是,如果我不将其添加为动态命名范围,并在WORKDAY函数中使用此唯一范围,我会得到一个值!错误这是因为此范围末尾的NUM值。请参阅我的原始帖子中的“我的编辑”…请参阅我编辑的帖子。我有点不明白为什么要使用MDHolidays而不是SelectedHolidays。在任何情况下,你都可以修改你发布的最新公式如下。。。是的,除了这个,我没有其他的解决办法。谢谢你的解决方案。唯一的问题是,如果我不将其添加为动态命名范围,并在WORKDAY函数中使用此唯一范围,我会得到一个值!错误那是因为怒族 此范围结束时的M值。