2016-04-29 10 views
0

私はそうのようなスプレッドシートのSheet1のクライアントのリストを持っている:excel:index match - 支出上位10のジョブをリストしますか?

Date   Entity  Sector  Client   Spend 
April 2016  Group1  Aerospace  Client A  £2,000,000.00 
April 2016  Group1  Aerospace  Client B  £5,000,000.00 
April 2016  Group2  Rail   Client C  £13,000.00 
April 2016  Group1  Aerospace  Client D  £45,000.00 
April 2016  Group1  Telecoms  Client E  £20,000.00 

私たちはと一緒に過ごすのトップ10のクライアントのリストを引きたいです。

私は私が設定する必要があり、特定のパラメータ/基準を持っている、すなわち

クライアントは、「グループ1」の実体を持たなければならないと「航空宇宙」部門の下に来なければなりません。

私は、セルC6に= Aerosapce 私の部門を置くセルA10で

私は私のグループを割り当てる=グループ1

は、これまでのところ私は、10件のユニークな結果を生成するために、この配列数式を使用して、10行をそれを下にドラッグしています。

=IFERROR(INDEX('Opp Data'!$H2:$H5000,MATCH(1,('Opp Data'!$G$2:$G$5000&'Opp Data'!$F$2:$F$5000=$A$10&$C$6)*('Opp Data'!$K$2:$K$5000=LARGE(IF('Opp Data'!$G$2:$G$5000&'Opp Data'!$F$2:$F$5000=$A$10&$C$6,'Opp Data'!$K$2:$K$5000),ROW(1:1))*(COUNTIF($C$13:$C13,'Opp Data'!$H$2:$H$5000)=0)),0)),"") 

最大に最低支出、そうのような結果を生成するとともにために、これは私のクライアントを与える必要があります:私は、クライアントが属していることを、関連部門の一覧を表示したい

クライアント名の隣に
Client   Sector   Spend 

Client B  
Client A 
Client D 
etc 
etc. 

つまり、「航空宇宙」とその横の列に費やしています。私は、インデックスが一致使用してこれをやっている

:現時点ではデータを

=IFERROR(INDEX('Opp Data'!$C:$C, MATCH(A2,'Opp Data'!$D:$D, 0)),"") 

はあらゆる場所にあり、クライアント名で対応していない費やし、そして一部のクライアントはしていないことが示されていますグループ1または航空宇宙。

Client   Sector   Spend 

Client B   Rail    £20,000.00 
Client A   Aerospace   £13,000.00 
Client D   Telecoms   £2,000,000.00 
etc 
etc. 

しかし、私はこの取得する必要があります:

私はこれを取得しています

Client   Sector   Spend 

Client B   Aerospace   £5,000,000.00 
Client A   Aerospace   £2,000,000.00 
Client D   Aerospace   £45,000.00 
etc 
etc. 

私は間違って行くと良い方法があれば私に知らせていますどこの誰かは私を見ることができますしてくださいこれをする?事前

答えて

1

おかげで、あなたのテーブルフィルタを使用してピボットテーブルになる最善の方法を取得します。これにより、あなたが望むことをすることができます。あなたはその後、数式をしたい場合はその

外:

まずトップ支出を取得します。

=IFERROR(AGGREGATE(14,6,$E$2:$E$6/(($C$2:$C$6=$G$2)*($B$2:$B$6=$H$2)),ROW(1:1)),"") 

あなたの支出の列の最初のセルでこれを入れて、下にドラッグします。これを行うために、我々は、LARGE()またはAGGREGATE()関数を使用する必要があります。行(1:1)は、ドラッグされると増加するカウンタとして機能します。そうすれば、それは第一のものから第二のものまで見つけることができます。

/以下の部分は、基準を満たすもののみが使用されることを指示します。私はG2にAerospace、H2にGroup1を入れました。

セクター:

その後、我々は、他の2つの列に他のデータを取得するためにINDEXを側で別のAGGREGATE()関数を使用することができます

=IF(L2<>"",INDEX($C$2:$C$6,AGGREGATE(15,6,(ROW($C$2:$C$6)-1)/(($E$2:$E$6=L2)*($B$2:$B$6=$H$2)),COUNTIF($L$2:$L2,L2))),"") 

それとも、我々はすでに所望のセクタを持っているので、セルでは、単に可能性:

=IF(L2<>"",$G$2,"") 

クライアント:

=IF(L2<>"",INDEX($D$2:$D$6,AGGREGATE(15,6,(ROW($D$2:$D$6)-1)/(($E$2:$E$6=L2)*($B$2:$B$6=$H$2)),COUNTIF($L$2:$L2,L2))),"") 

支出額に同数の結束がある場合は、MATCHではなくAGGREGATEを再度使用します。 COUNTIF()は、それらの重複を取得することができます。ここで、Matchは両方に対して最初のものだけを返します。

この部分に注意するために、範囲に合わせて数式の範囲を編集する場合:(ROW($D$2:$D$6)-1)これは、INDEX()関数に整数を返すカウンタです。これは1から始める必要があります。したがって、データが3行目から始まる場合は、12に変更する必要があります。それは開始行より1少ないはずです。ピボットテーブルとともに

enter image description here

、高度なフィルタおよびVBAに見えます。それらがあなたの問題にどのように役立つかについては、HEREを参照してください。

関連する問題