- ベストアンサー
Excelについて
Sheet1 B10 C10 D10 名前 回答 順位 あ 20 2 い 30 1 う 15 3 え 15 3 ・・・・・・・・ Sheet2 B8 C8 順位 名前 1 い 2 あ 3 う 3 え Sheet1の名前は固定、回答は別Sheetから引きよう 順位はランダム このSheet1の順位と名前をSheet2に新たに順番に出来ないのでしょうか? どうか宜しくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
No.3です! >#VALUE! とありますが、Sheet2のC列がエラーになっているのですよね? よくよく数式を確認してみると当方の間違いで、C9セルの範囲指定の行数が違っている可能性があります。 =IF(B9="","",INDEX(Sheet1!$B$11:$B$100,SMALL(IF(Sheet1!$D$11:$D$100=B9,ROW($A$1:$A$85)),COUNTIF($B$9:B9,B9)))) を =IF(B9="","",INDEX(Sheet1!$B$11:$B$100,SMALL(IF(Sheet1!$D$11:$D$100=B9,ROW($A$1:$A$90)),COUNTIF($B$9:B9,B9)))) に訂正してみてください。 INDEX関数の範囲指定行数と ・・・ROW($A$1:$A$90)・・・ の行数が一致しないとエラーになる可能性があります。 (ROW($A$1:$A$90)は必ず1行目からINDEX関数で範囲指定した行数にします。) ※ 他の原因としては、C9セルが配列数式になっていない場合が考えられます。 前回書いたのですが、この画面からC9セルに数式をコピー&ペーストした後に (1)数式バー内で一度クリック! (2)貼り付け後、C9セルをダブルクリック! (3)貼り付け後、F2キーを押す! 上記のどの方法でも構いません。編集可能になりますので Shift+Ctrlキーを押しながらEnterキーで確定してみてください。 これで数式の前後に{ }マークが入り配列数式になります。 これをオートフィルで下へコピーではどうでしょうか? これでもダメならごめんなさいね。m(_ _)m
その他の回答 (5)
- kagakusuki
- ベストアンサー率51% (2610/5101)
作業列を使わず、関数のみで表示させる方法です。 まず、Sheet1のD11セルに次の数式を入力して下さい。 =IF(ISNUMBER(INDEX($C:$C,ROW())),RANK(INDEX($C:$C,ROW()),$C:$C),"") 次に、Sheet1のD11セルをコピーして、Sheet1のD12以下に貼り付けて下さい。 次に、Sheet2のB9セルに次の数式を入力して下さい。 =IF(ROWS($9:9)>COUNT(Sheet1!$D:$D),"",SMALL(Sheet1!$D:$D,ROWS($9:9))) 次に、Sheet2のC9セルに次の数式を入力して下さい。 =IF(ISNUMBER($B9),INDEX(Sheet1!$B:$B,SUMPRODUCT(ROW(Sheet1!$D$10:INDEX(Sheet1!$D:$D,MATCH(9^99,Sheet1!$D:$D)))*(Sheet1!$D$10:INDEX(Sheet1!$D:$D,MATCH(9^99,Sheet1!$D:$D))=$B9)*(COUNTIF(OFFSET(Sheet1!$D$10,,,ROW(Sheet1!$D$10:INDEX(Sheet1!$D:$D,MATCH(9^99,Sheet1!$D:$D)))-ROW(Sheet1!$D$10)+1),$B9)=COUNTIF($B$8:$B9,$B9)))),"") 次に、Sheet2のB9~C9の範囲コピーして、同じ列の10行目以下に貼り付けて下さい。 これで、Sheet2には、順位と順位順に並べ替えた名前が、自動的に表示されます。 尚、Sheet1のD列中に、順位以外の数値が存在している場合には、上記の関数のままでは、正しい表示が得られません。 もし、Sheet1のD1~D10の範囲に、順位以外の数値が存在している場合には、Sheet1のD11セルとSheet2のB9セルに入力する関数を、次の様な関数に修正して下さい。 【Sheet1のD11セルの関数】 =IF(ISNUMBER(INDEX($B:$B,ROW())),RANK(INDEX($B:$B,ROW()),$B$10:INDEX($B:$B,MATCH(9^99,$B:$B))),"") 【Sheet2のB9セルの関数】 =IF(ROWS($9:9)>COUNT(Sheet1!$D:$D)-COUNT(Sheet1!$D$1:$D$10),"",SMALL(Sheet1!$D$10:INDEX(Sheet1!$D:$D,MATCH(9^99,Sheet1!$D:$D)),ROWS($9:9)))
お礼
有難う御座います。
- MackyNo1
- ベストアンサー率53% (1521/2850)
Sheet2の各セルに以下の数式を入力し下方向にオートフィルしてください。 B9セル =IF(COUNT(Sheet1!$D$11:$D$100)<ROW(A1),"",SMALL(Sheet1!$D$11:$D$100,ROW(A1))) C9セル =INDEX(Sheet1!B:B,SMALL(INDEX((Sheet1!$D$11:$D$100<>B9)*10000+ROW($D$11:$D$100),),COUNTIF(Sheet2!$B$9:B9,B9)))&""
お礼
有難う御座います。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! すでに回答は出ていますので、参考程度で・・・ Sheet1の順位はRANK関数ですでに出されているものとします。 とりあえずSheet1の100行目まで対応できる数式です。 ↓の画像でSheet2のB9セルに =IF(COUNTA(Sheet1!$B$11:$B$100)<ROW(A1),"",SMALL(Sheet1!$D$11:$D$100,ROW(A1))) C9セルに =IF(B9="","",INDEX(Sheet1!$B$11:$B$100,SMALL(IF(Sheet1!$D$11:$D$100=B9,ROW($A$1:$A$85)),COUNTIF($B$9:B9,B9)))) C9セルは配列数式になってしまいますので、この画面からC9セルにコピー&ペーストする場合は C9セルに貼り付け後、 数式バー内で一度クリック(編集可能になります) → そのままShift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 最後にB8・C9セルを範囲指定し、C9セルのフィルハンドルで下へコピーすると画像のような感じになります。 ※ 配列数式を使用する場合はデータ量が多いとPCの負担になりますので、あまり良い方法とは言えないかもしれません。 参考になれば良いのですが・・・m(_ _)m
お礼
#VALUE! もう少し頑張って見ます、有難う御座いました。
- keithin
- ベストアンサー率66% (5278/7941)
まず,シート1の順位の計算を次のようにします。 D11: =IF(C11="","",RANK(C11,$C$11:$C$99)+ROW()/1000) 以下コピー D11以下のセルを選び,ツールバーのカンマボタンをクリックしてカンマ区切り書式を付けます。 シート2の計算は次のようにします B9: =IF(ROW(B1)>COUNT(Sheet1!$D$11:$D$99),"",SMALL(Sheet1!$D$11:$D$99,ROW(B1))) 以下コピー,B9以下にカンマ区切り書式を付けます C9: =INDEX(Sheet1!$B$11:$B$99,MATCH(B9,Sheet1!$D$11:$D$99,0))&"" 以下コピー。
お礼
>C9: >=INDEX(Sheet1!$B$11:$B$99,MATCH(B9,Sheet1!$D$11:$D$99,0))&"" 同じ名前が出てきます? もう少し頑張ってみます、有難う御座いました。
お礼
有難う御座います。 この方法で問題なく解決しました、他のセルにも適応できました、ありがとう御座いました。