2015-10-08 65 views
0

我在Excel中的矩陣工作正常:如何在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)) 

我想給它添加另一個條件:( '組件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 +輸入第二個矩陣給出N/A實際上它必須返回一個值。什麼可能是一個解決方案? 感謝

+1

在數組公式中使用整個列引用是一個災難性的想法。你的第二個公式被迫計算超過400萬個單元格,這對於單個公式來說是絕對驚人的。 –

+0

這可能是一個解決方案? VBA或替代公式? – Ale

+0

您是否驗證了至少有一行符合所有這些條件?這是我唯一可以解釋爲什麼你得到#N/A的結果,即沒有行匹配所有4個條件。 –

回答

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)) 

爲了使之更有效率,改變組件E SVLAN工作表到對所引用的數據塊動態命名範圍。通過引用命名範圍,只有恰好爲儘可能多的行將按需要進行處理。當新行被添加或刪除時,範圍將自行改變。

該公式的靜態條件之一是列AL等於"AT"。如果我們將範圍減少到AL列中包含任何文本的最後一行,那麼低於這個範圍的任何內容都不會在任何情況下返回。在列AL中包含文本值的最後一行可以通過以下公式得出:

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

是的,有一個引用的空格被匹配。該空間對於MATCH function返回文本列中的最後一行很重要。

您的列似乎有特定的用途,所以我將假設您沿着頂行有基於文本的列標題標籤。

轉到公式►定義名稱►名稱管理器。當名稱管理器對話框打開時,點擊新的

  1. 給範圍一個名字。我選擇了kesDATA
  2. 請將範圍: as 工作手冊。可選提供評論。
  3. 提供以下公式爲指:

    ='KIT e SVLAN'!$A$1:index('KIT e SVLAN'!$A:$XFD; match(char(255); $AL:$AL); match(char(255); $1:$1))
  4. 點擊OK創造的名稱,然後關閉關閉對話框。
  5. [可選]通過敲擊F5,打字kesDATA並單擊OK 測試新的命名範圍。您應該選擇整個命名範圍。

    Name Manager - Create New Name
    名稱管理器 - 創建新的名稱

現在改變您的公式對這些陣列formulas¹之一,

'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來完成多列cri teria處理。

'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)) 

這些公式可能看起來很複雜,但他們會要求你前一陣formulas¹做了計算週期的一小部分。


¹數組公式需要與按Ctrl ++Enter↵完成。一旦正確輸入第一個單元格,就可以像其他公式一樣向下或向右填充或複製它們。嘗試並將您的全列引用減少到更接近表示實際數據範圍的範圍。數組公式以對數形式計算週期,所以最好將參考範圍縮小到最小。有關更多信息,請參閱Guidelines and examples of array formulas

²AGGREGATE function與Excel 2010一起引入。它在早期版本中不可用。

+0

您從尋找文本條目最後一個非空行的建設很有趣,但也許不是最嚴格的。並非所有的文本字符串都是「」。例如,單個連字符(「 - 」)不是,因此可能會導致您的構建失敗。當然,你可能會爭辯說,導致你的構造失敗的角色列表只包括那些在實際情況下如此模糊或罕見的角色列表,只有99.9%的嚴格性應該足夠。但是,我個人覺得我們應該始終努力100%:-) –

+0

@XORLX - 通常,我在過去使用過匹配(「zzz」,$ AT:$ AT)'。以上是我嘗試的新東西。 – Jeeped

+1

我想你可以提供它的警告,如果任何非字母字符串都存在,它可能無法正常工作,儘管這可能不是理想的,尤其是考慮到「zzz」方法可以保證與包括特殊字符的所有字符串一起工作。另外,就像使用「zzz」方法一樣,我注意到如果範圍內有任何空字符串(「」),您的新嘗試可能會失敗,所以這是另一個警告! –