如何在Excel中编写索引,匹配矩阵?

时间:2015-10-08 09:59:55

标签: excel excel-formula

我在excel中有一个矩阵工作正常:

=INDEX('KIT e SVLAN'!N:N;MATCH(1;('KIT e SVLAN'!A:A=E3)*('KIT e SVLAN'!AK:AK="S")*('KIT e SVLAN'!AL:AL="AT");0))

我想补充另一个条件:('KIT e SVLAN'!L:L =“0”)

得到类似的东西:

=INDEX('KIT e SVLAN'!N:N;MATCH(1;(('KIT e SVLAN'!A:A=E4)*('KIT e SVLAN'!L:L="0")*('KIT e SVLAN'!AK:AK="S")*('KIT e SVLAN'!AL:AL="AT"));0))

当我按下Ctrl + Shift + Enter时,第二个矩阵给出N / A实际上它必须返回一个值。什么可以解决方案? 感谢

1 个答案:

答案 0 :(得分:0)

...*('KIT e SVLAN'!L:L=0)*...部分删除引号后,您的工作公式为

=INDEX('KIT e SVLAN'!N:N;MATCH(1;(('KIT e SVLAN'!A:A=E4)*('KIT e SVLAN'!L:L=0)*SIGN(LEN('KIT e SVLAN'!L:L))*('KIT e SVLAN'!AK:AK="S")*('KIT e SVLAN'!AL:AL="AT"));0))

为了提高效率,请将 KIT e SVLAN 工作表上的引用数据块更改为动态命名范围。通过引用命名范围,只有完全将根据需要处理多个行。当添加或删除新行时,范围将重塑自身。

公式的一个静态条件是列AL等于"AT"。如果我们将范围缩小到包含AL列中任何文本的最后一行,那么下面的任何内容都不重要,因为它们在任何情况下都不会被返回。包含AL列中文本值的最后一行可以使用以下公式

到达
=match(char(255); AL:AL)

是的,有一个匹配的引用空间。对于MATCH function来说,空格对于从文本列返回最后一行非常重要。

您的列似乎有特定用途,因此我假设您在顶行有基于文本的列标题标签。

转到公式►定义的名称►名称管理器。 “名称管理器”对话框打开后,单击新建

  1. 为范围指定名称。我选择了 kesDATA
  2. 范围:保留为工作簿。可选择提供评论。
  3. 提供以下公式:

    ='KIT e SVLAN'!$A$1:index('KIT e SVLAN'!$A:$XFD; match(char(255); $AL:$AL); match(char(255); $1:$1))
  4. 点击确定创建名称,然后关闭关闭对话框。
  5. [可选]通过点击 F5 ,键入 kesDATA 并单击确定来测试新的命名范围。您应该选择整个命名范围。

    Name Manager - Create New Name
    名称管理员 - 创建新名称

  6. 现在将公式更改为其中一个数组公式¹,

    'for zeroes and blanks in column L
    =INDEX(INDEX(kesDATA; ; 14); MATCH(1; (INDEX(kesDATA; ; 1)=E3)*NOT(INDEX(kesDATA; ; 12))*(INDEX(kesDATA; ; 37)="S")*(INDEX(kesDATA; ; 38)="AT"); 0))
    'for zeroes in column L but not blanks,
    =INDEX(INDEX(kesDATA; ; 14); MATCH(1; (INDEX(kesDATA; ; 1)=E3)*NOT(INDEX(kesDATA; ; 12))*SIGN(LEN(INDEX(kesDATA; ; 12)))*(INDEX(kesDATA; ; 37)="S")*(INDEX(kesDATA; ; 38)="AT"); 0))
    

    ...或其中一个标准公式使用较新的AGGREGATE² function来完成多列标准处理。

    'for zeroes and blanks in column L,
    =INDEX(INDEX(kesDATA; ; 14); AGGREGATE(15; 6; ROW(INDEX(kesDATA; ; 14))/((INDEX(kesDATA; ; 1)=E3)*NOT(INDEX(kesDATA; ; 12))*(INDEX(kesDATA; ; 37)="S")*(INDEX(kesDATA; ; 38)="AT")); 1))
    'for zeroes in column L but not blanks,
    =INDEX(INDEX(kesDATA; ; 14); AGGREGATE(15; 6; ROW(INDEX(kesDATA; ; 14))/((INDEX(kesDATA; ; 1)=E3)*NOT(INDEX(kesDATA; ; 12))*SIGN(LEN(INDEX(kesDATA; ; 12)))*(INDEX(kesDATA; ; 37)="S")*(INDEX(kesDATA; ; 38)="AT")); 1))
    

    这些公式可能看起来很复杂,但它们只需要你之前的数组公式¹所做计算周期的一小部分。

    ¹数组公式需要用 Ctrl + Shift + Enter↵完成。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas

    ² {2010}引入了AGGREGATE function。它在早期版本中不可用。