• ベストアンサー

エクセルの関数を使った並べ替え

写真はA,B,C列を第一優先をG列、第二優先をF列でならべ変えたものですが、 これを関数を使って自動でやりたいのですが、どのようにすればいいのでしょうか? *A列、B列、C列に入っているものも関数で表示されているものです。 http://jisaku.155cm.com/src/1371307474_719732ce3fb5d5d42790d60a0711c8f38d87f586.jpg

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

回答No3です。 F2への入力の式は次のように訂正してください。 =IF(E2="","",E2*100+D2)

touch_ken
質問者

お礼

ぶじに並べ替えることができました。 ありがとうございました~

その他の回答 (4)

回答No.5

特にこれが良い方法というわけではありませんが。「各列の振り仮名の最初の 3 文字目までと行番号に基づいてソートする数式」を作ってみました。 元データの最下行の行番号が 10,000 未満であれば、F・G 列に表示される一意な値は、C 列、B 列、行番号という優先順位で並べ替えたときに単調増加の数列になるよう、桁数を調整しています。同様に J 列も、合計によって桁がかぶらないようにしてあります。 E1 =ROW(E1) F1 =CODE(LEFT(PHONETIC(B1),1))+IFERROR(CODE(MID(PHONETIC(B1),2,1)),)/10^4+IFERROR(CODE(MID(PHONETIC(B1),3,1))/10^8,) H1 =RANK(F1,F$1:F$15,1)*10^4 I1 =RANK(G1,G$1:G$15,1)*10^8 J1 =SUM(E1,H1:I1) L1 =INDEX($A$1:$C$15,MATCH(SMALL($J$1:$J$15,ROW(L1)-ROW(L$1)+1),$J$1:$J$15,),COLUMN(L1)-COLUMN($L1)+1) ※ F 列を G 列に、L 列を M 列・ N 列に、それぞれオートフィル 振り仮名として平仮名と片仮名が混ぜこぜに使われていると、正しく計算しません。どちらかに統一してください。 なお F・G 列は、小数点第 8 位まで表示されるように書式設定しています。具体的には、設定したい範囲を選択した状態で、右クリックなどから「セルの書式設定>表示形式タブ>ユーザー定義>種類ボックス」に、「0.00000000」と入力しました。 言うまでもありませんが、オートフィルタやピボットテーブルで並べ替えるほうが、遥かに実用的です。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

データがA,B,C列の2行目から下方に入力されているとします。 同じようなデータが数百以上も同じものが並ぶことを考えてD、E,F列には作業列を設けて対応します。 D2セルには次の式を入力し、E2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(B2="","",IF(COUNTIF(B$2:B2,B2)=1,ROUNDDOWN(MAX(D$1:D1),-3)+1000,ROUNDDOWN(INDEX(D$1:D1,MATCH(B2,B$1:B1,0)),-3)+COUNTIF(B$1:B1,B2))) F2セルには次の式を入力し下方にドラッグコピーします。 =IF(E2="","",E2*1000000+D2) お求めの表をH列からJ列に表示させるとしてH2セルには次の式を入力してJ2セルまで横にドラッグコピーしたのちに下方にkもドラッグコピーします。 =IF(ROW(A1)>COUNT($F:$F),"",INDEX($A:$C,MATCH(SMALL($F:$F,ROW(A1)),$F:$F,0),COLUMN(A1)))

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! >*A列、B列、C列に入っているものも関数で表示されているものです ここがネックですね! 数式によって表示されているデータはおそらく並ぶ替えはできないと思いますので・・・ 一旦実データにします。 並び替え用に作業列としてD列を使用します。 ↓の画像のように一旦並び替えの優先順位の表を作成しておきます。 ※ 列方向は左の列が優先、行方向は上の行が優先 とします。 D1セルに =MATCH(C1,F:F,0)*1000+MATCH(B1,G:G) という数式を入れフィルハンドルでダブルクリック A~D列を範囲指定 → 右クリック → コピー → A1セルを選択 → 右クリック → 「形式を選択して貼り付け」 → 「値」を選択しOK これで実データになります。 最後にD列の昇順で並び替えを行います。 こんなんではどうでしょうか?m(_ _)m

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

とりあえずI1辺りに =IF(A1="","",COUNTIF(C:C,">"&C1)+COUNTIF(B:B,">"&B1)/1000+(1000-ROW())/1000000) と記入、リスト下端までコピー貼り付け E1に =IF($I1="","",INDEX(A:A,MATCH(LARGE($I:$I,ROW()),$I:$I,0))) と記入、右に下にコピー貼り付け。

関連するQ&A