[田中] | [国語] | [○]
[田中] | [算数] | [×]
[田中] | [理科] | [×]
[木村] | [国語] | [×]
[木村] | [算数] | [×]
[木村] | [理科] | [×]
[佐藤] | [国語] | [×]
[佐藤] | [算数] | [○]
[佐藤] | [理科] | [○]
[鈴木] | [国語] | [×]
[鈴木] | [算数] | [×]
[鈴木] | [理科] | [×]
[山田] | [国語] | [×]
[山田] | [算数] | [○]
[山田] | [理科] | [×]
のようになっているファイル(実際には行数がもっと多いです)で、
条件に1件でも該当する名前を上部に、
[田中] | [国語] | [○]
[田中] | [算数] | [×]
[田中] | [理科] | [×]
[佐藤] | [算数] | [○]
[佐藤] | [理科] | [○]
[佐藤] | [国語] | [×]
[山田] | [算数] | [○]
[山田] | [国語] | [×]
[山田] | [理科] | [×]
[木村] | [国語] | [×]
[木村] | [算数] | [×]
[木村] | [理科] | [×]
[鈴木] | [国語] | [×]
[鈴木] | [算数] | [×]
[鈴木] | [理科] | [×]
のようにさせたいのですが、
良いやり方がありましたらご教授ください。よろしくお願いします。
関数と並び替えで出来る方法を一つ。
名前がA列、
教科がB列、
条件がC列、
にそれぞれ入っているとして、
D1=A1&C1
E1=COUNTIF(A:A,A1)-COUNTIF(D:D,A1&"×")
と入力し、該当行までコピーします。
(私のPCで10000行1分ちょっとでした)
D、E列を選択し、コピー、そのまま右クリック「形式を選択して貼り付け」で値貼り付けをします。
ツールバーの「データ」→「並び替え」で、
最優先されるキーを「列B」(教科)「昇順」でOK。
再度「並び替え」をクリックして、
最優先「列E」「降順」
2番目「列A」「昇順」
3番目「列C」「降順」
でOK。
これで例示の結果と同じ並びにになるかと思います。
以上ご参考まで。
Rank関数を使ってはいかがですか?
名前のところをドラッグしてRankで並び替えられると思います。
(解釈が間違っていたらごめんなさい)
文字上の都合上、説明不足ですみません。
実際の列数は10000行以上・名数が1000件以上あるものとしてお願いします。
1列追加して、追加した列に名前ごとの○×判定を関数で入れてはいかがでしょうか。
名前をA列、科目をB列、○×をC列、追加する列をD列とします。
一番上に空行(項目名の行でもOK)を入れます。
(1)名前ごとの行数(科目の種類)が固定の場合
D2に以下の関数を入れます。
=IF(A2=A1,D1,IF(COUNTIF(C2:C4,"○")>0,1,0))
(質問文中の[ ]は無視しています。また、科目数が増えればcountifの中身を替えてください)
これを行末までオートフィルした後、並び替えで
D列:降順
A列:昇順(降順でも可)
C列:昇順
にすればOKです。
もし名前の順を今のまま保持したい場合は、
最初の列にIDとして連番を付けて、チェック列(上記のD)、ID列、○×列で並び替えをしてください。
(2)名前ごとの行数(科目数)が異なる場合
((1)にも使えるのですが)ピボットテーブル+vlookup関数でチェック列を作成します。
ピボットテーブルで名前ごとに○と×のデータの個数を数えて、○が1つ以上ある場合にチェック欄を1にするようにします。
「データ」>「ピボットテーブルとピボットグラフレポート」で「ピボットテーブル/ピボットグラフウィザード」を出します。
1/3は「次へ」
1/2ではデータの範囲を指定し、
3/3の「レイアウト」で「行」に名前、「列」に○×、「データ」にはどれか(どれでもいい)の個数を設定します。
できあがったピボットテーブルに対し、
=if(○の欄の数>0,1,0)
で名前ごとに判定をつけ、今度はこの名前と1or0の判定結果をもとにデータシートのチェック列にvlookupで1or0を反映させればOKです。
あとは(1)の並べ替えと一緒です。
※(2)のやり方は(1)にも適用できますが、データが多いとピボットテーブルは重くなるので(1)でできるなら(1)をお勧めします。
※多少細かいところは省略してしまいましたが、不明な点あればコメント欄で補足しますのでご指摘ください。
ありがとうございます。
名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、
わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。
よろしければそちらの方で再度回答いただければありがたいです。
A列の名前の並びを変えたくないという条件でしょうか?
それならば
①とりあえず、空いているD列のセルD1に1と入れます。
(D列セル全体の書式は標準にしておいてください)
②D2のセルに次のような式を入力します。
=IF(a1=a2,d1,d1+1)
③セルD2をコピーし、最終データがあるセルD10000まで
貼り付けます。(もし10000行まであるとしたら)
④D列全体を選び、コピーした後、
形式を選択して貼り付け→値、
を実行するとD列が数値の並びに変わります。
⑤最後に、並び替えを実施します。
最優先キー C列:降順、(○×)
2番目のキー D列:昇順。(名前順を数値化したもの)
ありがとうございます。
名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、
わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。
よろしければそちらの方で再度回答いただければありがたいです。
ugi1010です、さっきの回答を訂正します。
間違い
⑤最後に、並び替えを実施します。
最優先キー C列:降順、2番目のキー D列:昇順。
訂正
⑤最後に、並び替えを実施します。
最優先キー D列:昇順、2番目のキー C列:降順。
再度書き直すと
①とりあえず、D列のセルD1に1と入れます。
②D2のセルに次のように入力します。=IF(a1=a2,d1,d1+1)
③セルD2をコピーし、最終データがある行までペーストします。
④D列全体を選び、コピーした後、
形式を選択して貼り付け→値、を実行するとD列が数値の並びに変わります。
⑤最後に、並び替えを実施します。
最優先キー D列:昇順、2番目のキー C列:降順。
でした。よって前回の回答は、なしにしてください。
ありがとうございます。
名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、
わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。
よろしければそちらの方で再度回答いただければありがたいです。
↑
すみません、3、4番目に回答したugi1010です。さらに墓穴を掘ってしまいました。
ありがとうございます。
名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、
わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。
よろしければそちらの方で再度回答いただければありがたいです。
関数と並び替えで出来る方法を一つ。
名前がA列、
教科がB列、
条件がC列、
にそれぞれ入っているとして、
D1=A1&C1
E1=COUNTIF(A:A,A1)-COUNTIF(D:D,A1&"×")
と入力し、該当行までコピーします。
(私のPCで10000行1分ちょっとでした)
D、E列を選択し、コピー、そのまま右クリック「形式を選択して貼り付け」で値貼り付けをします。
ツールバーの「データ」→「並び替え」で、
最優先されるキーを「列B」(教科)「昇順」でOK。
再度「並び替え」をクリックして、
最優先「列E」「降順」
2番目「列A」「昇順」
3番目「列C」「降順」
でOK。
これで例示の結果と同じ並びにになるかと思います。
以上ご参考まで。
ありがとうございます。
名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、
わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。
よろしければそちらの方で再度回答いただければありがたいです。
ありがとうございます。
名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、
わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。
よろしければそちらの方で再度回答いただければありがたいです。
http://q.hatena.ne.jp/1184068835