• ベストアンサー

エクセル 並び替え

EXCEL2000を使用していますが データー 2-123 22222 2-234 上記3個のデーターを通常の昇順で並べると 2-123 22222 2-234 のようになりますが ハイフォンを優先順位の上位に入れ 2-123 2-234 22222 のように並び替えたいのですが 何かいい方法を教えていただけないでしょうか?

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

  • ベストアンサー
  • tag1701
  • ベストアンサー率54% (67/123)
回答No.1

A列にあると仮定します。 =SUBSTITUTE関数をB列に使用してハイフンを数字0に置き換えます。 =SUBSTITUTE(A1,"-",0) B列をキーに並び替えをした後B列削除でどうでしょうか?

77TAKETAKA
質問者

お礼

御礼が遅れてすみません。 上記、SUBSTITUTE(サブスティテュート)関数で 簡単に解決しました。 この関数を知らなかったのですが調べてみると 色々な入力支援などにも使用できそうなので 助かります。 ありがとう御座いました。

その他の回答 (6)

  • 48toshi
  • ベストアンサー率44% (8/18)
回答No.7

「77TAKETAKA」さん こんばんは #6で回答したものです。 ご指摘の通りExcel2003でテストした結果の回答です。 今回、Excel2000をインストールしてテストしてみました。 結果は、 1)入力文字が、全部全角では並び替えは実行されない。   (セルの状態は、「文字」で実施「22222」が全角にならないため) 2)入力文字が、全角(「-」の入っているもの)と半角(「22222」数値に見える物)   では並び替えが実行されるので、一度「-」があるものと   数値に見える物を層別します。   その後、「-」があるものと数値に見える物を   それぞれで「並び替え」を実行する   (セルの状態は、「標準」。これは、通常の規定値なのでなにもしない状態) 3)入力文字が、全部半角の場合も並び替えは実行される。   並び替えが実行されたあとは、2)の途中と同じなので省略。 4)最後に、複数列のセルを同時に並び替えは「優先されるキー」を   指定すれば可能です。 以上、長くなりましたが検証してみた結果です。 参考になれば良いのですが。

77TAKETAKA
質問者

お礼

補足に対してこれほどご足労を掛けさせてすみませんでした。 とても参考になりました。 ありがとう御座います。

  • 48toshi
  • ベストアンサー率44% (8/18)
回答No.6

「77TAKETAKA」さん おはようございます。 例をみると「並び替え」後、順番が変わっていないので 「22222」がセルで文字扱いになっていると推測します。 そこで「並び替え」の実行時に「並び替えの前に」が表示されるので、 「数値に見えるものは…」を選択し 一度「-」があるものと数値に見える物を層別します。 その後、「-」があるものと数値に見える物を それぞれで「並び替え」を実行しては如何でしょうか。 参考になれば幸いです。

77TAKETAKA
質問者

補足

48toshiさん おはようございます。 上記、御回答ありがとう御座います。 バージョンの違いでしょうか 並び替えの前にに表示されるのが 選択範囲を拡張する 現在選択されている範囲を並び替え 以上2点しか表示されないと思います。 又、上記の処理は2列の昇順条件処理に対しても 対応可能でしょうか?

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.5

"0"で置換するのは、元データに"0"を含んでいると、"-"に戻すときにうまくいかない。 "."で置換するか、CODEをつかって作業列Bで次のようにでもする。 データが半角なら、 =IF(A3="","",(CODE(MID(A1,1,1))-48)*13000+(CODE(MID(A1,2,1))-45)*1000+(CODE(MID(A1,3,1))-48)*100+(CODE(MID(A1,4,1))-48)*10+(CODE(MID(A1,5,1))-48)*1) データが全角なら、 =IF(A1="","",(CODE(MID(A1,1,1))-9008)*13000+(CODE(MID(A1,2,1))-8509)*1000+(CODE(MID(A1,3,1))-9008)*100+(CODE(MID(A1,4,1))-9008)*10+(CODE(MID(A1,5,1))-9008)*1) これでBを含んだ並べ替えをする。

77TAKETAKA
質問者

補足

誠にすみません。 CODE関数を使用したことが無い為 (CODE(MID(A1,1,1))-48)*13000 A1セルの一桁目の判別だと思うのですが -48は半角判別?と*13000 *1000 *100は桁数判別?を 行っているのでしょうか? 又桁数としたら何故*10000でなく*1300なのでしょうか? お手数を掛けますが宜しければ教えていただけないでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

エクセルの場合、現実にシートに見えている(実現している)データがあってそこをソートキーにして、並べ替えざるを得ない。 言葉で表したルールなどでは、(プログラムを組むのではないので)役に立たない。 ちなみに、漢字氏名れつなどは、ふりがなでエクセルは並べ替えができる(する)が、エクセルシステムを作る人には、ふりがなのデータのあり場所が見えているからプログラムで出来るのです。我々にはどこにあるか教えられていないので、エクセルがもしフリガナで並べ替えてくれない仕組みなら、関数を使ってシートにふりがなをだし、そこを指定して、ソートするほかないのです。 同じように、エクセルのルール以外の並べ方をする場合は、何処か空き列に、関数や置換で修正ソートキー列を作り、そこを指定して、ソートするほかないのです。 一旦別列にソートキー列をコピー貼り付けする。その列で 本件ではソートキー列が文字列なら、ーを0に置き換え、1のセルをコピーし、形式を選択して貼り付けー乗算ー1を掛ける、で数値化して、ソートするとよいと思う。 数字ならーを0に置き換えだけでソートすると、質問者の思うように出来ると思う

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

私なりの式を作って並べ替えはCODE関数の値にしたがって並べ替えられると思っていました。しかし、それがお示しのケースでは摘要できなかったのですが、CODE関数を使った式の計算結果の列を使って並べ替えるなら問題が無いことが判りました。その意味では今回のご質問は大変役に立ちました。 問題の文字列がA1セルからA3セルにあるとしてB1セルには次の式を入力します。 =IF(A1="","",CODE(A1)+CODE(MID(A1,2,1))/30+CODE(MID(A1,3,1))/9000 A1セルからB3セルを選択したのちに「データ」から「並べ替え」最優先されるキーで列Bを指定し、昇順で並べ替えます。 その後にB列を削除すればよいでしょう。

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.2

こんにちは  すでに回答がありますが、一時的に"-"を"."置換えて数値で並び替えをして再びsubstituteで"-"に戻すのはいかがでしょう。

77TAKETAKA
質問者

お礼

ありがとう御座います。 substituteを使用することで解決しました。

関連するQ&A