- 締切済み
エクセルで並べ替え
エクセルでデータベースを作ってます。 ある項目の多い順に並べ替えをしたいのですが、何か良い方法はありませんか? 【例】 名前 カナ 出身地 山田 ヤマダ 長崎 田中 タナカ 長崎 山本 ヤマモト 福岡 佐藤 サトウ 東京 西田 ニシダ 福岡 西山 ニシヤマ 福岡 出身地の多い順で並べ替え 福岡>長崎>東京 の様に並べ替える
- みんなの回答 (2)
- 専門家の回答
みんなの回答
#1です。 >ちなみにデータベースとしてエクセルを使用する場合、 >セルに数式や関数は使わないほうがいいのでしょうか? ん~、まず、教科書的な回答としては、 「そもそもExcelをデータベース管理に使うのが無茶」です。 Excelはあくまで「表計算」ソフトで、 想定している用途は「表」や「リスト」の作成管理ですから、 「データベース」と呼べるほど規模の大きいデータを取り扱うのは、 いろいろな意味で無理があります。 ただし「ならどんなソフトでどうすれば良いのか?」となると私には答えられませんし、 導入・運用・保守・管理・引継その他諸々のコストを総合的に勘案した結果、 「多少無理してでもExcelでやりたい」ということはあると思いますので、 以下、あくまで一般論ですが、いくつかアドバイスを。 ----------------------------------------------------------- ●自動再計算をオフにする。 オプションで計算方法を[手動]にして、 必要な時だけF9キー等で再計算する。 ●値として確定する 変化することのない値や、作業に伴って一時的に計算した値は コピー>編集>形式を選択して貼り付け>値 で、結果を値に確定する (通常の「表計算」では逆に数式を残しておいた方が良いですが) ●組み込みの機能を活用する 数式だけで(理論的には)たいていのことはできますが、 フィルタ・ピボットテーブル・クエリ等を活用した方が、 処理速度の点で優位です。 ●数式にもよる 先述のCOUNTIFのように、縦方向に参照する数式は、 特定の行の内容や位置が変更されただけで全部再計算ですから、 非常に重たい処理になります。 一方、単に横方向にセルを参照して計算する数式であれば、 再計算負担はそれほど大きくありません。 ●数式の書き方にもよる 一見同じ動作をする数式でも、書き方によって 速い(軽い)数式と遅い(重い)数式があります。 ●作業列を積極的に使う 作業列を使わず、関数をネスト(入れ子に)して一発で計算するような数式は、 一見スマートに見えますが、一般に処理自体は鈍重になります。 ●無駄なエラー処理をしない 「エラー値を見せない」ためだけに =IF(ISERROR(数式),数式) みたいにすることがありますが、これでは「2回ずつ」計算することになります。 数式自体はエラー値をそのまま返させておいて、 ・[条件付き書式]でエラー値を白フォントにする ・[ページ設定]でエラー値を印刷しないようにする といった対処法の方が軽い処理になります。 ----------------------------------------------------------- 例えば、ご質問の例であれば、出身地の種類は高々47種類しかないので、 【スマートに】COUNTIF一発で書くよりもむしろ、 D2セル:まず、上方について、探してみる =VLOOKUP(C2,$C$1:E1,3,0) E2セル:なければ、下方について、数える =IF(ISNA(D2),COUNTIF(C2:$C$65536,C2),D2) つまり、 「初出の場合のみ数える。初出でなければ、すでに出ている数字を探して使う」 方がはるかに軽い処理になりますし、 いっそのこと、都道府県別の頻度を別表として用意して、 その表からVLOOKUPで探すようにすれば、さらに軽くなります。 以上ご参考まで。長乱文陳謝。
質問文の例で、 仮に、A1セルから入力されているとすると、 出身地の入力されている列はC列ですね。 また、1行目は見出し行で、データが2行目からだとすると、 D2セルを =COUNTIF(C:C,C2) として下方にフィルすれば、同じ出身地の人が何人いるかが表示されます。 あとは、D列をキーにして、降順で並べ替えればOK。 ■Excel豆知識20-5:エクセル:並べ替え http://www11.plala.or.jp/koma_Excel/contents3/mame3020/mame302005.html ■Excel豆知識8-2:エクセル:COUNTIF関数 http://www11.plala.or.jp/koma_Excel/contents1/mame1008/mame100802.html
お礼
回答ありがとうございました。 早速試したところ、期待通りの結果が得られました。 ちなみにデータベースとしてエクセルを使用する場合、セルに 数式や関数は使わないほうがいいのでしょうか? 並べ替えをした時にすごく時間がかかるのですが・・・?
お礼
回答ありがとうございます。 大変参考になりました。