大型矩阵的高级过滤器,如何仅将员工编号放入

时间:2018-08-16 21:00:49

标签: excel excel-vba excel-formula

我有一个很大的矩阵,其中有两个不同的文档(内部和外部),其中包含公司中的所有员工(超过1500名),我创建了一个新文档,我想使用该文档仅包含有关员工的特定信息输入他的员工编号。

我可以获得所有特定信息,例如:姓名,保险号码,工作区域等。但是问题是,当我尝试获得他已完成的课程(因为有多个结果)时,它的评分为10- 20个结果,我需要显示所有课程,而不仅仅是第一门课程,例如使用VLOOKUP公式时。


该表如下所示:

名称课程日期状态


有谁知道这是否可能?谢谢。

1 个答案:

答案 0 :(得分:0)

对此已在this post的exceljet.net上进行了研究。为避免链接腐烂:

  

通用公式

{=INDEX(array,SMALL(IF(vals=val,ROW(vals)-ROW(INDEX(vals,1,1))+1),nth))}
  

说明

     

要使用INDEX和MATCH获得第n个匹配项,您可以使用使用IF和SMALL函数计算匹配项行号的数组公式。

     

在所示示例中,I7中的公式为:

{=INDEX(amts,SMALL(IF(ids=id,ROW(ids)-ROW(INDEX(ids,1,1))+1),H6))}
  

其中命名范围是ams(D4:D11),id(I3)和id(C4:C11)。

     

请注意,这是一个数组公式,必须使用 Control + Shift + Enter 输入。

我做了更多工作,得到了下面的内容。请注意,我通过使用“插入”>“表”将原始数据(列A,B和C)转换为“表1”,并且标题的命名很有用。

   A           B        C             D       E      F
3                                    looking for:    Bill
4
5  Name      debt     currency       nth    Debts   In...
6  Bill        50      USD             1      50     USD
7  Bill        49      EU              2      49     EU
8  Susan      100      USD             3      51     EU
9  Charles    100      LI              4      30     WON
10 Bill        51      EU              5
11 Bill        30      WON             6

...这是公式:

debts
=IFERROR(INDEX(Table1[debt],SMALL(IF(Table1[Name]=$F$3,ROW(Table1[Name])-ROW(INDEX(Table1[Name],1,1))+1),$D6)),"")

in...
=IFERROR(INDEX(Table1[Currency],SMALL(IF(Table1[Name]=$F$3,ROW(Table1[Name])-ROW(INDEX(Table1[Name],1,1))+1),$D6)),"")

请注意,$ D6用于增加每一行(即$ D7,$ D8等)。

请确保使用ctrl-shift-enter完成键入方程式,以便数组公式起作用!您会知道这是有效的,因为出现了大括号{}。