在符合特定条件的列表中显示第n个值

我想find符合特定条件的列表中的第n个值,并将这些值分别放在单独的工作表中打印出来。

更具体地说,我有一个以数字或PF开头的发票号码清单,而且我希望以PF开头的第一个(或第二个,第三个等)值显示在forms发票工作表上,第一个(或第二个,第三个等) )值以数字开头,显示在发票工作表中。

目前我有这样的发票号码的select:

发票#

PF17-0982 43256 65342 96038 PF16-0934 10293 

我想在这个列表上打印出符合我给出的标准的第n个值,所以无论是从一个数字开始还是从PF开始,在一个单独的工作表中。

最初我尝试过

 =IF(LEFT('Top Sheet'!S5)="P",'Top Sheet'!S5,"") 

它可以find以PF开头的数字,但显然只能用于列表中的第一个单元格。 我也有

 =IF(ISNUMBER(LEFT('Top Sheet'!S5)*1),'Top Sheet'!S5,"") 

对于列表中的第一个值来说,这又是一个非常好的工具,但是对于其他的东西来说却不是这样。

所以,我自然search,并尝试使用INDEX和MATCH和searchfunction,这里findhttps://exceljet.net/formula/get-first-match-cell-contains,但我不希望输出是另一个列表依赖仅在发票号码列表中的一个值上。 不过,我不介意有一个中间名单(例如TRUE和FALSE值列表),这将最终导致我有一个单一的输出。 目前我已经使用这个清单:

 =SUMPRODUCT(--ISNUMBER(SEARCH({"PF"},'Top Sheet'!S5)))>0 

这就把我带到这里来,我尝试了上述技术的各种变化,并失败无望。 我要么得到一些描述的错误,要么只是TRUE和FALSE值。 我希望这是有道理的。

另一个可以正常input公式的公式方法是使用AGGREGATE函数确定发票数组中的行号。 使用SMALL运算符,您可以处理数组,忽略错误并返回多个值。

如果Invoices是包含您的发票清单的命名范围,则:

  • 对于以PF开头的发票

     =IFERROR(INDEX(Invoices,AGGREGATE(15,6, 1/(LEFT(Invoices,2)="PF")*ROW(Invoices)-MIN(ROW(Invoices))+1,ROWS($1:1))),"") 
  • 对于以数字开头的发票

     =IFERROR(INDEX(Invoices,AGGREGATE(15,6,1/ISNUMBER(-LEFT(Invoices,1)*ROW(Invoices))*ROW(Invoices)-MIN(ROW(Invoices))+1,ROWS($1:1))),"") 

对于这些公式中的任何一个,input一些单元格并填充直到公式返回空白。 ROWS...参数将递增并为SMALL函数返回适当的k

另一种方法是使用一个简单的filter,然后将可见单元复制/粘贴到所需的位置。

或者你可以使用高级filter,它有一个内置的方法将结果粘贴到另一个位置。

为了从列表中提取多个项目,您可以使用INDEX函数和SMALL来创build一个数组公式。

 =IFERROR(INDEX($B$4:$B$9,SMALL(IF((ISNUMBER($B$4:$B$9)),ROW($B$4:$B$9)-3),ROW(1:1)),1),"") 

重要提示:在input此公式时,使用CTRL + SHIFT + ENTER使其成为数组公式。

此公式从您的列表中获取第一个数字值。 如果公式更改为ROW(2:2),则会从列表中select第二个数字值,然后可以自动填充公式以随心所欲地提取。

这是一个相当复杂的公式,但是你首先索引一个范围“INDEX(B4:B9”,然后用if语句使用SMALL(ISNUMBER(B4:B9)),然后定义源数据的第一行“ROW(B4 :B9)-3)“减3是因为它从上面开始是3行,接下来是符合你想要提取的标准的行”ROW(1:1)“,并且最后是包含你想要的值的列“),1”

我不是最好的人解释这个公式,但有一些很好的教程在线。

与F4中的公式的示例

数据透视表替代方法:

  • (可选)select单元格的范围,包括标题“Invoice#”单元格
  • Insert选项卡> PivotTable
  • 确保标题单元格包含在Table/Range:字段中
  • selectExisting Worksheet和您想要过滤列表的Location范围
  • 在右侧显示的PivotTable Field List上检查Invoice #字段
  • 在工作表上单击“ Row Labels单元格中的三angular形filterbutton,然后select“ Label Filters >“ Begins With... >“ PF
  • (可选),请单击Grand Totals > Off for Rows and Columns ,然后取消选中“ Column Headers ,并根据需要重命名“ Row Labels单元格文本

对于数字,您可以复制数据透视表并将标签filter更改为Less Than... > A

每当源Invoice #范围更改,您可以单击Data选项卡上的Refresh All Data透视表刷新。