2017-02-22 129 views
0

enter image description here索引/匹配IF聲明

正如你所看到的,我在左邊有一個數據庫表。而且我想添加IF語句,只允許我查找A公司前5名的[代碼],[名稱]和[金額]。然後爲B公司做前5名等等。我設法查找了所有公司中的前5名,但似乎無法爲特定公司添加標準。

這裏是我的公式至今:

公式中的列K [公司]:= INDEX(Database,MATCH(N3,sales,0),1)

公式在列L [編號]:在列M [名] = INDEX(Database,MATCH(N3,sales,0),2)

公式:=在列N [量] INDEX(Database,MATCH(N3,sales,0),2)

公式:= LARGE(sales,ROW(1:20))

預期的結果是顯示每個公司中前5名的銷售人員以及他們的[代碼],[姓名]和[金額],隨意建議對工作表進行任何編輯。

+2

這些公式無法正常工作!如果'金額'中的值不唯一(例如,「匹配」將失敗)。你的'金額'中有3次'2000')。你可以考慮使用數據透視表來完成這項工作。 –

+0

代碼是唯一代碼嗎?這應該使它更容易一些(看起來像肖恩和克里斯有相同的代碼,所以也許不是?)。 –

+0

認爲這很簡單,但實際上讓我感到頭痛。我可以從數組公式中獲取數量,但由於有多個匹配數量,因此獲取索引的行數很麻煩。在這裏使用助手列選項? –

回答

0

好吧,我已經實現了這一點,使用一個可以隱藏的輔助列。請注意,儘管這隻會在任何一家公司的總數不超過9個的情況下有效,但我認爲您不應該遇到這個問題,但可能會發生這種情況,助手專欄添加的數字需要進行調整

enter image description here

第一個輔助柱:

添加一個數字總表示量已存在上述那家公司的次數的結束。此公式爲=CONCATENATE([@Amount],COUNTIFS($A$1:A1,A2,$D$1:D1,D2))*1

這是乘以1以保留LARGE的數字格式。

第二個輔助柱:

這是一個數組公式,將需要通過使用Ctrl鍵 + 移是輸入 + 輸入,同時仍然在公式欄中。

這一個公式是: =LARGE(IF(Company="A",Helper),ROW(1:1))

這個公式確實什麼作爲數組公式是基於所IF聲明LARGE可以使用結果列表。而不是整個列被評爲最大到最小,我們現在可以挑選出具有「A」公司,像這樣的行:

=LARGE({20000;20001;20002;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;15000;14000;30000;FALSE;FALSE;FALSE;FALSE},ROW(1:1))

LARGE將只與數值工作,所以FALSES生產,其中A列不匹配「A」將被忽略。請注意,爲什麼我在此處使用幫助器列來消除唯一值,但不會影響前5個。

ROW(1:1)已被使用,因爲這會在公式被拖動時產生下一個最高結果時自動更新。

爲頂部5陣列的主要公式

再次,這是一個陣列式所以將需要輸入通過使用Ctrl鍵 + + 輸入,同時仍然在公式欄。

=INDEX(Database,SMALL(IF(Company="A",IF(Helper=$O3,ROW(Company))),1)-1,COLUMN(A:A))

隨着數組公式爲一些未知的原因IF(AND())只是不爲我工作,所以我有兩個嵌套IF的來代替。

請注意,我再次檢查第一列是否匹配「A」,然後檢查最後一列是否與第二個公式的結果匹配。會發生什麼情況是這兩個條件在數組中匹配(如同時在同一行中產生TRUE)我想要返回行號。

IF({TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE},IF({FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE;FALSE},{2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20}))

它看起來像我認識的一個爛攤子,但其中兩個TRUEs對齊的位置給了我們一行16結果。

{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;16;FALSE;FALSE;FALSE;FALSE}

據我知道,只能有一個匹配可能對於這一點,我用SMALL搶得頭編號最小的INDEX公式行中使用,並扣除1,因爲我們沒有考慮頭在INDEX公式中,所以我們實際上需要第15個結果。

再次,COLUMN(A:A)已被用於列號的返回,因爲這會在公式被拖動時自動更新。

如果你與我的解釋掙扎,要我提供更清晰,隨時伸手,我會盡我所能來解釋更詳細

+0

是的請,如果你可以解釋更多,我將不勝感激。 – Skinny

+0

你能否解釋一下你寫的每個公式在哪個單元格中的應用? – Skinny

1

這裏的邏輯是一個選擇,如果你知道代碼是唯一的。把一個到K3後:K7

首先獲得A公司的最高數額在N3

=AGGREGATE(14,6,Database[Amount]/(Database[Company]=K3),ROWS(N$1:N1)) 

開始然後找到相匹配的量的代碼,但只有當它以前沒有(這個用假定該代碼是唯一的)在L3

開始
=INDEX(Database[Code],MATCH(1,INDEX((Database[Company]="A")*(Database[Amount]=N3)*ISNA(MATCH(Database[Code],L$2:L2,0)),0),0)) 

然後用正常INDEX/MATCH在M3

=INDEX(Database[Name],MATCH(L3,Database[Code],0)) 
開始找到匹配的名稱

enter image description here

+0

對於[名稱],最後一個公式給出錯誤。注意到有一個括號丟失,但即使當我添加它仍然給我一個錯誤。 – Skinny

+0

沒關係,在[Name]列標題中有一個空格,它看起來像這個[Name],但是無論如何感謝您的答案,但有一件事是有辦法返回[Company]而無需手動放置它在前五名的桌子上? – Skinny

+0

感謝您發現失蹤的paren。我認爲最好的辦法是列出所有不同的公司A,B,C,D等,然後有一個下拉列表,您可以選擇其中的一個並從那裏填寫K欄。這是完全可行的,但我不會有機會看到它,直到明天早上。 –