アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel関数

表1 お菓子類販売数
 A列  B列   C列  D列  E列・・・・Q列
1 メーカー名 商品名 部門  1月 2月・・・・合計
2 つばめ すっきり ジュース 350 250・・・・4500
3 つばめ まろやか ガム 214 205・・・・2840
4 つばめ げんき ガム 247 198・・・・3120
5 つばめ いちご ジュース 360 380・・・・5240
6 すずめ みかん ジュース 320 215・・・・4162
7 すずめ あまあま ジュース 284 178・・・・3968
8 すずめ しゃき ガム 183 216・・・・2963
9 すずめ グリーン ガム 169 209・・・・2834
10 はと れもん ジュース 217 301・・・・4295
11 はと かるい ガム 238 240・・・・3657
12 はと すうすう ガム 199 236・・・・3102

上記の表がシート1にあります。
そして、シート2に下記の2つの表を作成しなければなりません。
表2 部門別販売数No.1
A列 B列  C列 D列
1部門名 メーカー名 商品名 合計
2ジュース
3ガム

表3 メーカー別販売数ベスト3
A列 B列  C列 D列
1メーカー名 1  2 3
2つばめ
3すずめ
4はと

表2はジュース・ガムの部門別のトップ販売数の商品名とメーカー名、合計(表1のQ列)を表示させます。
表3は部門に関係なくメーカー別に販売数ベスト3商品名を表示させます。

どのように関数式を作ったらいいのでしょう?
両方ともINDEX、MATCH、LARGE関数を使うのかなあと漠然と考えるのですが・・・
表3はメーカーの検索範囲をどのように指定するのかが特にわかりません。
表2はうまく考えがまとまりません・・・

どなたか教えて下さい!よろしくお願いします。

A 回答 (8件)

D15: =SUMPRODUCT(MAX((C$2:C$12=A15)*(Q$2:Q$12)))


B15: =INDEX(A$2:A$12,MATCH($D15,$Q$2:$Q$12,0))
B19: =INDEX($B$2:$B$12,MATCH(SUMPRODUCT(LARGE(($A$2:$A$12=$A19)*($Q$2:$Q$12),B$18)),$Q$2:$Q$12,0))
「Excel関数」の回答画像5
    • good
    • 0
この回答へのお礼

ありがとうございました。
非常に参考になりました。

お礼日時:2010/06/19 15:11

すみません 先ほどの計算式では、合計が同じ場合の事を


考慮していませんでした。
先ほどの式を入力後修正してみてください。
Sheet1 のS列より右側に修正を行います。
つばめ列の右に3列 列を追加する
すずめ列の右に3列 列を追加する
はと 列の右に3列 列を追加する
T2セル =IF(S$17=ROWS(T$2:T2),0,S2)
先ほど追加した列全ての2行目から12行目に
(T2~V12 ,X2~Z12 ,AB2~AD12 )
コピーする。
16行から17行を消去する。
S15セルの式を T15~AD15 にコピーする。
S17セルの式を T17~AD17 にコピーする。

Sheet2
C9セルの $S$17 部分を S17 に修正する。
C9セルの式を、D9 ,E9 にコピーする。
C10セルの $W$17 部分を W17 に修正する。
C10セルの式を、D10 ,E10 にコピーする。
C11セルの $AA$17 部分を AA17 に修正する。
C11セルの式を、D11 ,E11 にコピーする。

もし、3位が、2商品存在していた場合にも
対応する必要が有るならば、

Sheet1
V18セル =IF(U15=V15,1,0)
V18セルの式を、Z18 ,AD18 にコピーする。

Sheet2
F8セル =IF(SUM(Sheet1!$S$18:$AE$18)>=1,E8,"")
F9セル =IF(Sheet1!V18>=1,INDEX(Sheet1!$B$2:$Q$12,Sheet1!V17,2,1),"")
F10セル =IF(Sheet1!Z18>=1,INDEX(Sheet1!$B$2:$Q$12,Sheet1!Z17,2,1),"")
F11セル =IF(Sheet1!AD18>=1,INDEX(Sheet1!$B$2:$Q$12,Sheet1!AD17,2,1),"")

同じ様な事を、部門別でも必要ならば、同じ考え方で対応出来ると思います。
(注意:変更部分のチェックが一部分のみですので
 ファイルをコピーしてから行ってみて下さい。)
考えかた
デターをメーカー 及び 部門 毎に分割
それぞれのデーターを、上位から下位に選択
(1位のデーターを 0 にして2位のデーターを選択)
(2位のデーターを 0 にして3位のデーターを選択)
(3位のデーターを 0 にして4位のデーターを選択)
(これにより同位が複数あっても対応する)
選択データーの列位置を呼び出す
列位置から必要行のデーターを表示させる
追加部分
3位のデーターが、2データーあった場合
そのデーターも表示させる
    • good
    • 0
この回答へのお礼

ありがとうございました。
ただ、作業列を使用できないので、今回は他の方の回答を参考にさせていただきました。
今後の参考にさせていただきます。

お礼日時:2010/06/19 15:13

ちょっと面倒くさい方法ですが、


全体としては、単純だと思いますので参考にしてみて下さい。
Sheet1 の B2 が つばめ ~ Q12 が 3102 のデーターが入力されている条件です。

Sheet1 に以下の式を入力する。
S1セル つばめ
T1セル すずめ
U1セル はと
W1セル ジュース
X1セル ガム
S2セル =IF(S$1=$B2,$Q2,0)
S2の式を、S2 から U12 にコピーする。
W2セル =IF(W$1=$D2,$Q2,0)
W2の式を、W2 から X12 にコピーする。
S15セル =LARGE(S$2:S$12,1)
S15の式を、S15 から U17 と W15 ,X15 にコピーする。
S16セル =LARGE(S$2:S$12,2)
S16の式を、T16 ,U16 にコピーする。
S17セル =LARGE(S$2:S$12,3)
S17の式を、T17 ,U17 にコピーする。
S19セル =MATCH(S15,S$2:S$12,0)
S19の式を、S19 から U21 と W19 ,X19 にコピーする。

Sheet2 の C2 に メーカー名 が入力されているとする。
Sheet2 に以下の式を入力する。
B3セル ジュース
B4セル ガム
C3セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$W$19,1,1)
D3セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$W$19,2,1)
E3セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$W$19,16,1)
C4セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$X$19,1,1)
D4セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$X$19,2,1)
E4セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$X$19,16,1)

C8セル 1位
D8セル 2位
E8セル 3位
B9セル つばめ
B10セル すずめ
B11セル はと
C9セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$S$19,2,1)
D9セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$S$20,2,1)
E9セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$S$21,2,1)
C10セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$T$19,2,1)
D10セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$T$20,2,1)
E10セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$T$21,2,1)
C11セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$U$19,2,1)
D11セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$U$20,2,1)
E11セル =INDEX(Sheet1!$B$2:$Q$12,Sheet1!$U$21,2,1)

データー数が多い場合には、列、行 を挿入してみて変化する部分を
確認して変更を行ってみて下さい。
    • good
    • 0

配列数式でも出来るのでやってみた。


例データ
A列B列C列D列E列・・・・Q列
1メーカー名商品名部門1月2月合計
2すずめグリーンガム169?2092834
4すずめしゃき??ガム183?2162963
8すずめあまあまジュース284?1783968
9すずめみかん??ジュース320?2154162
3つばめまろやかガム214?2052840
6つばめげんき??ガム247?1983120
11つばめすっきりジュース350?2504500
12つばめいちご??ジュース360?3805240
5はと??すうすうガム199?2363102
7はと??かるい??ガム238?2403657
10はと??れもん??ジュース217?3014295
D16:E24に下記を用意する
ガム3657
ジュース5240

すずめ14162
すずめ23968
すずめ32963
つばめ15240
つばめ24500
つばめ33120
F16に 
=MAX(IF($D$3:$D$14="ガム",$I$3:$I$14,""))と入れてSHIFT+CTRL+ENTERの3つのキーを同時押し。
F17へは式の複写.

F19に
=LARGE(IF($B$3:$B$13=D19,$I$3:$I$13,0),E19)と入れてSHIFT+CTRL+ENTERの3つのキーを同時押し。
F24まで式複写。
知る紋では順位を横に流しているが、順位をColumn()-1のようにすれば返られる。
ーー
文字は完全位置で無いと結果がおかしくなる。
こちらでは、WEB本質問のデータをコピーし区切り位置で分離すると、「つばめ」のあとにスペースが付いて、旨く結果が出ず手間取った。注意。

もうそろそろエクセル関数では限界で、アクセスのSQLを使うとか、VBAでも使うとかする時期になっているかと思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。
今回はNO.5さんの回答を参考にさせていただきました。
今後の参考にさせていただきます。

お礼日時:2010/06/19 15:15

Sheet2には以下の式を入力します。



D2セル

=MAX(INDEX((Sheet1!$C$2:$C$20=A2)*(Sheet1!$Q$2:$Q$20),))

B2セルに以下の式を入力し右方向に1つ、下方向にオートフィルします。

=INDEX(Sheet1!A$2:A$20,MATCH($D2,Sheet1!$Q$2:$Q$20,0))

Sheet3のB2セルに以下の式を入力し、右方向に3つ、下方向にオートフィルします。

=INDEX(Sheet1!$B$2:$B$20,MATCH(LARGE(INDEX((Sheet1!$A$2:$A$20=$A2)*Sheet1!$Q$2:$Q$20,),COLUMN(A1)),Sheet1!$Q$2:$Q$20,))
    • good
    • 0
この回答へのお礼

ありがとうございました。
今回は、ANo.5さんの回答をさんこうにさせていただきました。
今後の参考にさせていただきます。

お礼日時:2010/06/19 15:17

別に関数でやらないでも


ピボットテーブルで処理すれば簡単だと思いますが・・。
    • good
    • 0
この回答へのお礼

そうですよね・・・
ただ、関数を使用する指示が出てたもので・・・
ありがとうございました。

お礼日時:2010/06/19 15:18

かなり面倒な作業になりますが次のようにすればよいでしょう。


表1がシート1に表2がシート2に表3をシート3に作るとしてシート1では1行目を項目名などにしてデータは2行目から下方に有るとします。
シート1ではいくつかの作業列を設けます。
R1セルには部門別順位とでも入力してからR2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A2="","",SUMPRODUCT((($C$2:$C$1000=C2)*$Q$2:$Q$1000>Q2)*1)+1)

S1セルには部門区分とでも入力してからS2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(R2="","",IF(R2=1,MAX(S$1:S1)+1,""))

T1セルにはメーカー別順位とでも入力してからT2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A2="","",SUMPRODUCT((($A$2:$A$1000=A2)*$Q$2:$Q$1000>Q2)*1)+1)

U1セルにはメーカー区分とでも入力してからU2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A2="","",IF(A1<>A2,MAX(U$1:U1)+1,IF(A1=A2,U1,"")))

V2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(U2="","",U2&"/"&T2)

以上でシート1での作業は終了して、シート2ではA1セルに部門別販売数No1とでも入力します。
A2セルに部門名、B2セルにメーカー名、C2セルに商品名、D2セルに合計とでも入力します。

A3セルには次の式を入力してD3セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(COUNTIF(Sheet1!$S:$S,ROW(A1))=0,"",IF(COLUMN(A1)=1,INDEX(Sheet1!$C:$C,MATCH(ROW(A1),Sheet1!$S:$S,0)),IF(COLUMN(A1)=2,INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$S:$S,0)),IF(COLUMN(A1)=3,INDEX(Sheet1!$B:$B,MATCH(ROW(A1),Sheet1!$S:$S,0)),IF(COLUMN(A1)=4,INDEX(Sheet1!$Q:$Q,MATCH(ROW(A1),Sheet1!$S:$S,0)),"")))))

シート3ではA1セルにメーカー別販売数ベスト3とでも入力します。
A2セルにはメーカー名、B2セルには1、C2セルには2、D2セルには3と入力します。
A3セルには次の式を入力したのちにD3セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(COUNTIF(Sheet1!$U:$U,ROW(A1))=0,"",IF(COLUMN(A1)=1,INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$U:$U,0)),IF(AND(COLUMN(A1)>=2,COLUMN(A1)<=4),INDEX(Sheet1!$B:$B,MATCH(ROW(A1)&"/"&COLUMN(A1)-1,Sheet1!$V:$V,0)),"")))
    • good
    • 0
この回答へのお礼

ありがとうございました。
今回は作業列を使用できないので、ANo5さんの回答を参考にさせていただきました。
今後の参考にさせていただきます。

お礼日時:2010/06/19 15:20

↓合計に重複があったら、使えません。


B15:D15セル範囲を選択して
=INDEX(A:Q,MIN(IF(MAX(IF($C$2:$C$12=$A15,$Q$2:$Q$12))=$Q$2:$Q$12,ROW($Q$2:$Q$12))),{1,2,17})
[Ctrl]+[Shft] +[Enter] で確定、配列数式です({}で囲まれる)

B19セルに
=INDEX($B:$B,MIN(IF(LARGE(IF($A$2:$A$12=$A19,$Q$2:$Q$12),B$18)=($A$2:$A$12=$A19)*$Q$2:$Q$12,ROW($Q$2:$Q$12))))
[Ctrl]+[Shft] +[Enter] で確定)

エラー処理もしていません。
重複があった場合はどのように処理するのでしょうか?
作業列を使っても良いでしょうか?
「Excel関数」の回答画像1
    • good
    • 0
この回答へのお礼

ありがとうございました。
今回は作業列を使用できなかったので、ANo.5さんの回答を参考にさせていただきました。
今後の参考にさせていただきます。

お礼日時:2010/06/19 15:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!