- ベストアンサー
エクセルVBAでの並び替えについて
エクセルでデータの並び替えの方法が分からなくて質問します。たとえばBの列の100~999、A100~A999、B100~B999のようなデータが縦に入っているものとします。この中には150-1、150-2のようなデータも混ざってます。これをそのままエクセルで並び替えをしても100~999までは上手にできるのですがその後に150-1とかきてA100~が始まります。例えばこのデータを100~始まり149、150-1,150-2、152,153、154のように上桁から基準に並び替えを行いたいのですがいい方法はありませんか?現在はマクロを使ってVBAでSORTの引数を触ったりしたのですが上手にいきません。基本的にVBAで行っているのでVBAでお願いします。初心者なのでよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1.100~999が数値で入っていませんか? 2.また、文字列になっている場合も、最初からセルの形式を文字列にしておいて入力した場合と、最初は数字で入力しておいて、後からセルの表示系列を文字列に変更した場合で挙動が違う様です。前者の場合は、質問者さんの意図通りに並べ替えされますが、後者の場合は、数値で入力した場合と同じ順番になる様です(XL2000の場合) 3.1の場合、もしくは2の後者の場合は、TEXT関数で完全な文字列に変更してやれば意図した並べ替えができると思います。ちなみに、セルを文字列に設定後、数値を値複写した場合も、2の後例と一緒で意図した順序にはなりませんでした。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
そのとおりのデータ(セルの値)でソートしてもうまく行かないのなら、うまく行くように作業列に修正ソートキーを作らないとダメです。(一点フリカナでソートするというエクセルのスペシャルサービスはエクセルが内部でプログラムを組んでいるので出来ますが例外) ーー エクセルのソートはセルに現実のセルにある「セルの値」(書式の色は2003までダメ)に基づいて並べ替えるのです。 セルの値+何かの設定=修正キーが内部に出来るーー>ソート の「何かの設定」(例えばーを省け)の仕組みはありません。 ーー プログラムの中で配列に修正データをもち、自作ソートなども考えられはするが、馬鹿げている。 ーー 本質問での、修正ソートキーの作り方は本件では (先頭?)アルファは除く ーは除く のロジックでよいのかなと思う。エクセル関数でも出来そうだが、何かの設定VBAコードでも1行かな。
お礼
ありがとうございました。
- kuma56
- ベストアンサー率31% (1423/4528)
100~999は数値データとして認識し、A100~A999、B100~B999や150-1、150-2は文字データとして認識しているのではないでしょうか。 その結果エクセルのソートは、数値を先にソートしてから文字列をソートさせているようなので、そのような結果になると思います。 セルの書式を文字列に設定してやれば条件がそろいそうですが、セルの書式を文字列に設定して入力しても、200は3桁、150-1は5桁と判断され、3桁の方が先に来てしまうようです。 とりあえず、100や250といったものは後ろにスペースを二つ付けると5桁と認識されるようで、希望通りの位置にくると思います。 ただしそれでも先頭文字がアルファベットだと、たとえデータが1ケタでも"数字でできた"データの後と判断するようです。 VBAでそれらを並べ替え可能なデータに変換させてやることも可能だと思いますが、本来はソートをさせるなら、エクセルにもその順序を理解できるようにデータを入力しておく必要があるかもしれません。
お礼
ありがとうございます。とりあえず思い通りになりました。
お礼
ありがとうございます。先にセルを文字列にしておけば上手にできました。後から文字列にしても完全に文字列にならないんですね。