2017-01-30 91 views
0

我想在列表中找到与特定条件相匹配的第n个值,并将这些值分别打印在单独的工作表中的不同位置。在符合特定条件的列表中显示第n个值[EXCEL]

更具体地说,我有一个以数字或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,"") 

这又奇妙的作品在列表中的第一个值而不是其他东西。

因此,我自然搜索并尝试使用INDEX和MATCH和SEARCH功能,如https://exceljet.net/formula/get-first-match-cell-contains,但我不希望输出是依赖于发票号码列表中仅一个值的另一个列表。不过,我不介意有一个中间列表(例如TRUE和FALSE值列表),这将最终导致我有一个单一的输出。我有这个名单,在其使用完成的时刻:

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

而且,这里带给我的,我已经试过上述技术的各种变化和绝望的失败。我要么得到一些描述的错误,要么只是TRUE和FALSE值。我希望这是有道理的。

+0

您是否考虑使用数据透视表(或Power Query)过滤列表,或者您需要过滤的列表是动态的? – Slai

+0

嗨,你可以扩展一点吗?我不熟悉数据透视表或Power Query。另外,感谢编辑哈哈。 – Ella

回答

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函数。

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

或者您可以使用高级过滤器,它具有内置方法将结果粘贴到其他位置。

+0

我很努力使这项工作atm,但有用的是不必做crtl + shift +特别是在向办公室的其他人解释时输入。 我试图避免复制粘贴选项,因为我希望所有工作表均由顶部表单填充。 – Ella

+0

@Ella你在挣扎着什么? –

+0

你好,现在似乎在工作,不知道我第一次做错了什么,谢谢! – Ella

1

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

=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),它将从列表中选择第二个数值,然后可以自动填充公式以提取尽可能多的数据。

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

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

Example with formula in F4

+0

感谢Gordon的快速回应! 这个工作可以提取数字,比我能想到的任何东西都好,我会在PF中开始使用它(希望能帮助我理解它是如何工作的)。 – Ella

+0

谢谢,你应该可以使用左($ B $ 4:$ B $ 9,2)=“PF”。此外,如果您想要使用多于一个标准,请使用“*”作为“AND”(标准1)*(标准2),并且可以将“+”用于“OR”。这并不容易。我仍然必须从之前使用过的地方复制它,因为我无法从头开始编写它。 – Gordon

0

透视替代:

  • (可选)选择细胞的包括标题“发票#”小区范围
  • Insert标签>PivotTable
  • 确保报头单元包括在Table/Range:
  • 选择Existing WorksheetLocation范围,您想要过滤的列表
  • 上的PivotTable Field List,显示了在右侧检查在片材上的Invoice #字段
  • ,在上的三角形滤波器按钮Row Labels细胞点击在Design标签点击Grand Totals选择Label Filters>Begins With...>PF
  • (可选) >Off for Rows and Columns,取消Column Headers,并在必要时

对于数字命名Row Labels格文本,你可以复制数据透视表并更改标签进行过滤,Less Than...>A

只要源Invoice #范围发生变化,您可以在Data选项卡上单击Refresh All,以便刷新数据透视表。

+0

谢谢你,我不确定这是我所需要的,但有趣的是没有! – Ella