2017-02-22 7 views
0

enter image description hereインデックス/マッチIFとの声明

あなたが見ることができるように、私は左側のデータベーステーブルを持っています。そして、私はA社の上位5社の[Code]、[Name]、[Amount]を検索できるIF文を追加したいと思います。次に、B社のトップ5をやるなど。私はすべての企業の中からトップ5を検索することができましたが、特定の企業をターゲットにする基準を追加できないようです。

ここに私の式はこれまでのところです:列L中= INDEX(Database,MATCH(N3,sales,0),1)

式[コード]:列K [社]で

式列M [名前]で= INDEX(Database,MATCH(N3,sales,0),2)

式:=列N [金額]でINDEX(Database,MATCH(N3,sales,0),2)

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

意図した結果は、[コード]、[名前]、[金額]と共に各企業の上位5名の営業担当者を表示し、ワークシートの編集を自由に提案することです。

+2

これらの式は正しく動作しません。 'Amount 'の値が一意でない場合(例えば、あなたは「金額」に3倍の「2000」を持つ)。このジョブにピボット・テーブルを使用することを検討することもできます。 –

+0

コードは一意のコードですか?それはちょっと簡単になるはずです(ShawnとChrisのコードが同じであるように見えますか?)。 –

+0

これはシンプルだと思っていましたが、実際には頭がおかしくなりました。私は配列の式から罰金を引き出す金額を得ることができますが、複数の一致する金額があるので、インデックスの行番号を取得するのは面倒です。ここでヘルパーカラムを使用していますか?配列の式として[Ctrl + Shift + Enter]を押しても大丈夫ですが、私はIFを使用して 'LARGE'配列を作成します(例: –

答えて

0

これは、あなたが隠すことができるヘルパーカラムを使用してこれを実現しました。ただし、これは1社につき9個以上の同一の合計がある場合にのみ有効ですが、この問題があるはずはないと思われますが、発生する可能性があります。ヘルパー列によって追加される数字は、その量は、すでにその会社のために上に存在する回数を示す合計の最後に数字を追加します

enter image description here

第1のヘルパーの列を微調整します。この式は=CONCATENATE([@Amount],COUNTIFS($A$1:A1,A2,$D$1:D1,D2))*1

LARGEの数値形式を維持するために1を掛けます。

第二ヘルパーカラム:

これは、配列数式であるとはCtrl + を用いて入力する必要があります、まだ数式バーにしながら、Shiftキー + を入力します。

この1のための式は次のとおりです。この数式は、配列数式として何 =LARGE(IF(Company="A",Helper),ROW(1:1))

LARGEが使用できるIF声明に基づいて結果のリストを生成しています。むしろ列全体が最小に最大位にランクされているよりも、私たちは今の会社「」そうなどを持つ行を選び出すことができます。

=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キー + シフト + を使用して入力する必要があります配列式であります。私が代わりに2 IF年代を入れ子にしているので、ちょうど私のために動作しませんIF(AND())いくつかの未知の理由のための配列数式で

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

最初の列が "A"と一致するかどうか、そして最後の列が2番目の数式の結果と一致するかどうかを再度確認していることに注目してください。何が起こるかは、これらの条件の両方が配列内で一致する場合です(両方とも同じ行の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}

私は、我々は、ヘッダーを考慮していないとして、私が行のINDEX式で使用する最初の最小数を取得し、1を控除するSMALLを使用し、このための可能つの一致が存在し得ることを知っているようにINDEX式では、実際には15番目の結果が必要です。

また、COLUMN(A:A)は、数式をドラッグすると自動的に更新されるため、列番号が返されるために使用されています。あなたが知っていれば

あなたは私の説明に苦労し、私はより多くの明快さを提供したい、手を差し伸べること自由に感じ、私はより詳細に

+0

ありがとうございます、もっと説明していただければ幸いです。 – Skinny

+0

あなたが書いた数式がどのセルに適用されるかを説明してください。 – Skinny

1

をロジックを説明するために全力を尽くすしている場合は、ここで代替ですコードはユニークです。 K3に入れた後:K7

まずそれが(この前に使用されていない場合にのみ、その後量に一致するコードを見つけるN3

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

で始まる会社Aの最高額を得ますその後、通常のINDEX/MATCHはM3

=INDEX(Database[Name],MATCH(L3,Database[Code],0)) 
を開始すると、一致する名前を検索L3

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

で開始)コードが一意であることを前提としてい

enter image description here

+0

最後の数式は[Name]のエラーを示します。括弧が欠落していたことに気づいたが、追加してもそれでもエラーが出る。 – Skinny

+0

[Name]列見出しにスペースがあり、[Name]のように表示されていましたが、どちらかの方法で回答していただきましたが、手動で置くことなく[Company]を返す方法がありますトップ5のテーブルに? – Skinny

+0

不足しているパレンを見つけてくれてありがとう。私は最良の方法は、すべての異なる企業A、B、C、Dなどのリストを作成することだと思う必要がありますドロップダウンして、そこから1つを選択し、そこからK列を記入することができます。それは完全に可能ですが、明日の朝までそれを見る機会はありません。 –