人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelで、

[田中] | [国語] | [○]
[田中] | [算数] | [×]
[田中] | [理科] | [×]
[木村] | [国語] | [×]
[木村] | [算数] | [×]
[木村] | [理科] | [×]
[佐藤] | [国語] | [×]
[佐藤] | [算数] | [○]
[佐藤] | [理科] | [○]
[鈴木] | [国語] | [×]
[鈴木] | [算数] | [×]
[鈴木] | [理科] | [×]
[山田] | [国語] | [×]
[山田] | [算数] | [○]
[山田] | [理科] | [×]

のようになっているファイル(実際には行数がもっと多いです)で、
条件に1件でも該当する名前を上部に、

[田中] | [国語] | [○]
[田中] | [算数] | [×]
[田中] | [理科] | [×]
[佐藤] | [算数] | [○]
[佐藤] | [理科] | [○]
[佐藤] | [国語] | [×]
[山田] | [算数] | [○]
[山田] | [国語] | [×]
[山田] | [理科] | [×]
[木村] | [国語] | [×]
[木村] | [算数] | [×]
[木村] | [理科] | [×]
[鈴木] | [国語] | [×]
[鈴木] | [算数] | [×]
[鈴木] | [理科] | [×]

のようにさせたいのですが、

良いやり方がありましたらご教授ください。よろしくお願いします。

●質問者: Solais
●カテゴリ:コンピュータ
✍キーワード:Excel ファイル 佐藤 名前 国語
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● Held
●10ポイント

Rank関数を使ってはいかがですか?

名前のところをドラッグしてRankで並び替えられると思います。

(解釈が間違っていたらごめんなさい)

◎質問者からの返答

文字上の都合上、説明不足ですみません。

実際の列数は10000行以上・名数が1000件以上あるものとしてお願いします。


2 ● hokuraku
●200ポイント

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)をお勧めします。

※多少細かいところは省略してしまいましたが、不明な点あればコメント欄で補足しますのでご指摘ください。

◎質問者からの返答

ありがとうございます。

名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、

わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。

よろしければそちらの方で再度回答いただければありがたいです。

http://q.hatena.ne.jp/1184068835


3 ● ugi1010
●50ポイント

A列の名前の並びを変えたくないという条件でしょうか?

それならば

?とりあえず、空いているD列のセルD1に1と入れます。

(D列セル全体の書式は標準にしておいてください)

?D2のセルに次のような式を入力します。

=IF(a1=a2,d1,d1+1)

?セルD2をコピーし、最終データがあるセルD10000まで

貼り付けます。(もし10000行まであるとしたら)

?D列全体を選び、コピーした後、

形式を選択して貼り付け→値、

を実行するとD列が数値の並びに変わります。

?最後に、並び替えを実施します。

最優先キー C列:降順、(○×)

2番目のキー D列:昇順。(名前順を数値化したもの)

◎質問者からの返答

ありがとうございます。

名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、

わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。

よろしければそちらの方で再度回答いただければありがたいです。

http://q.hatena.ne.jp/1184068835


4 ● ugi1010
●50ポイント

ugi1010です、さっきの回答を訂正します。

間違い

?最後に、並び替えを実施します。

最優先キー C列:降順、2番目のキー D列:昇順。

訂正

?最後に、並び替えを実施します。

最優先キー D列:昇順、2番目のキー C列:降順。

再度書き直すと

?とりあえず、D列のセルD1に1と入れます。

?D2のセルに次のように入力します。=IF(a1=a2,d1,d1+1)

?セルD2をコピーし、最終データがある行までペーストします。

?D列全体を選び、コピーした後、

形式を選択して貼り付け→値、を実行するとD列が数値の並びに変わります。

?最後に、並び替えを実施します。

最優先キー D列:昇順、2番目のキー C列:降順。

でした。よって前回の回答は、なしにしてください。

◎質問者からの返答

ありがとうございます。

名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、

わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。

よろしければそちらの方で再度回答いただければありがたいです。

http://q.hatena.ne.jp/1184068835


5 ● ugi1010
●0ポイント

すみません、3、4番目に回答したugi1010です。さらに墓穴を掘ってしまいました。

◎質問者からの返答

ありがとうございます。

名前ごとの行数(科目の種類)が固定と思われて当然のように質問してしまい、

わかりにくくなったと思いますので、再度質問しなおしさせてもらいました。

よろしければそちらの方で再度回答いただければありがたいです。

http://q.hatena.ne.jp/1184068835


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ