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

时间:2017-01-30 11:46:00

标签: excel list search indexing match

我想在列表中找到符合特定条件的第n个值,并将这些值打印在单独的工作表中的不同位置。

更具体地说,我有一个以数字或PF开头的发票编号列表,我希望以PF开头的第一个(或第二个,第三个等)值显示在形式发票工作表上,第一个(或第二个) ,第三个等)值以在发票工作表上显示的数字开头。

目前我可以选择发票号码:

发票#

PF17-0982

43256

65342

96038

PF16-0934

10293

我想在此列表中打印与我给出的条件匹配的第n个值,因此要么以数字开头,要么从PF开始,在单独的工作表中。

最初我试过

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

用于查找以PF开头的数字,但显然仅用于列表中的第一个单元格。 我也有

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

这对于列表中的第一个值再次有效,但不是很多。

所以,很自然地,我用Google搜索并尝试使用此处https://exceljet.net/formula/get-first-match-cell-contains中的INDEX和MATCH和SEARCH函数,但我不希望输出是另一个列表,仅依赖于发票编号列表中的一个值。但是我不介意有一个中间列表(例如TRUE和FALSE值的列表),这最终会导致我有一个输出。我现在有这个列表,使用:

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

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

3 个答案:

答案 0 :(得分:1)

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

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

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

此公式采用列表中的第一个数值。如果公式更改为ROW(2:2),它将从列表中选择第二个数值,您可以自动填充公式以提取任意数量的公式。

这是一个非常复杂的公式,但你首先索引一个范围" INDEX(B4:B9"然后使用SMALL和if语句"(ISNUMBER(B4:B9)) "然后定义源数据的第一行" ROW(B4:B9)-3)"减3是因为它从顶部开始是3行。接下来的行符合您要提取的条件" ROW(1:1)"并且最后一个包含您想要的值的列"),1"

我不是解释这个公式的最佳人选,但网上有一些很好的教程。

Example with formula in F4

答案 1 :(得分:1)

另一种可以正常输入公式的公式方法是使用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))),"")
    

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

另一种方法是使用简单的过滤器,然后将可见单元格复制/粘贴到您想要的位置。

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

答案 2 :(得分:0)

数据透视表替代方案:

  • (可选)选择单元格范围,包括标题“Invoice#”cell
  • Insert标签> PivotTable
  • 确保标题单元格包含在Table/Range:字段
  • 选择Existing Worksheet以及您希望过滤列表的Location范围
  • 右侧显示的PivotTable Field List上的
  • 会检查Invoice #字段
  • 在工作表上
  • ,在Row Labels单元格中点击三角形过滤器按钮,然后选择Label Filters> Begins With...> PF
  • (可选)在Design标签中点击Grand Totals> Off for Rows and Columns,取消选中Column Headers,并根据需要重命名Row Labels单元格文本

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

每当源Invoice #范围发生变化时,您都可以点击Refresh All标签上的Data,以便刷新数据透视表。