我想在列表中找到符合特定条件的第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值。我希望这是有道理的。
答案 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"
我不是解释这个公式的最佳人选,但网上有一些很好的教程。
答案 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)
数据透视表替代方案:
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
,以便刷新数据透视表。