dポイントプレゼントキャンペーン実施中!

データの並び替えでP1A023***-***,P2B034***-***,P3C045***-***
が入力されていたとするとPは同じなので次の1,2,3次にA,B,Cで並び替えられ次に
023となりますが、この数字の部分を並び替えの一番に
したいのですが、何か方法はありますか

A 回答 (5件)

むかしは、大型やオフコンでは、ソートマージソフトは、別独立ソフトで提供された。

そういう場合だと、ソートキーの位置を指定するパラメータは任意の位置から任意の長さで決められた。
しかしエクセルのデータは、1セルのデータが最小単位。
別作業列に一旦望みのデータを書き出さないとエクセルのソートは使えない。
(ただ関数の中では、関数の結果を引数とできるがそれは別)。
こういう、「ルールをデータ全体に当てはめて」、その結果でなになにをする(出来るようにする)発想はエクセルにはほとんどない。一旦セルに固定しないとならない。
このルールが簡単な場合だと、良くグラフなどで、初心者から、修正したデータで、の質問が出ているが、同じようなこと(ユーザー設定のソートを出来るようにしているから、こんなものを作るのはMSにとって簡単だと思うが)は、複雑にならないように自己規制してやらないようにしていると思う。
VBAでやってもエクセルのセルから配列などにデータを離してもその後のこと(自力ソート)が複雑で難しく、別の空き列に一旦修正データを作らないとならないだろう。エクセルのソートメソッドはRangeオブジェクトのメソッド。rangeオブジェクト以外には使えない。
    • good
    • 0
この回答へのお礼

回答ありがとうどざいました。
簡単には出来そうにないので、あきらめます。

お礼日時:2011/02/05 23:12

エクセルのツールバーにある「並び替え」は、


列(=1つのセル全体が対象)単位ですから、このままではできない。

並び基準に使いたい項目(m文字目からn文字)を抜きだす。

これ以外には、並び替え自身をVBAで実行させること。
これなら、シートのセル自身は変更しないし、別途列も増やさない。
セルのm文字目からn文字という指定で並びの判定基準にできる。
ロジックは50ステップもいかないだろうから
並べ替えのアルゴリズムわかっている人には難しい命令もなくそんなに難しくない。
そこまでするかどうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私には無理のようなので、あきらめます。

お礼日時:2011/02/05 23:14

コネクタ番号、信号名の表っぽいですね。



私がよくやったのは、ソート条件を複数使い分けるために「ソート用の列」を複数個用意し、
そこにコピー及び編集して置いておく、という方法です。

そこも含めてオートフィルタの範囲に設定しておくと、
「オートフィルタ」で「昇順」(または「降順」)にソートすると
そのソート条件に従って表全体を一気に並べ替える事ができます。
(要・たしか Excel 2003 以降)

例えば、A列を元にB~E列を以下のように作ります。
(列コピーしセル内容分割などすると楽です)

A       B  C  D  E
P1A001A03 P1 A 001 A03
P1B001A02 P1 B 001 A02
P1A002A01 P1 A 002 A01
P1B002A00 P1 B 002 A00
P2A001D03 P2 A 001 D03
P2B001D02 P2 B 001 D02
P2A002D01 P2 A 002 D01
P2B002D00 P2 B 002 D00

これを
>この数字の部分を並び替えの一番にしたい
ならば、数字の部分 D列でソートさせれば

A       B  C  D  E
P1A001A03 P1 A 001 A03
P1B001A02 P1 B 001 A02
P2A001D03 P2 A 001 D03
P2B001D02 P2 B 001 D02
P1A002A01 P1 A 002 A01
P1B002A00 P1 B 002 A00
P2A002D01 P2 A 002 D01
P2B002D00 P2 B 002 D00

と、お望み通りの順になります。

他列のソートも加味したい時は、手前の段階でその列でのソートを行っておきます。
要するに、列ごとのソートを、優先順位と逆順に行う、という事です。



信号名やグループ、ピン番号の抜けや重複がないか、ある信号があるピン番はどこか、など
必要な列でソートさせると素早く探せ、文字の誤読もかなり防げます。

信号名順(E列でソート)すると
A       B  C  D  E
P2B002D00 P2 B 002 D00
P2A002D01 P2 A 002 D01
P2B001D02 P2 B 001 D02
P2A001D03 P2 A 001 D03
P1B002A00 P1 B 002 A00
P1A002A01 P1 A 002 A01
P1B001A02 P1 B 001 A02
P1A001A03 P1 A 001 A03

何通りかのソートしたものをそれぞれ印刷しておくと、デバグ中に探す際に
適当な表を使ってすぐに見つけることができます。
元データは1つのexcelファイルですから、転記ミスのような誤りもありません。
(大元が間違ってればダメですけど)
    • good
    • 0
この回答へのお礼

こういう方法もあるのですね。
回答ありがとうございます。

お礼日時:2011/02/05 23:17

単純に、RIGTHかLEFT関数で、数字部分を取り出し、


空いた空白列に貼り付けて、
フィルタで昇順にすれば可能だと思います。

間違っていたらすみません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
調べてみます。

お礼日時:2011/02/05 23:19

作業列を使ってもいいなら


=MID(A2,4,3)&LEFT(A2,3)&RIGHT(A2,7)
でP1A023***-***,P2B034***-***,P3C045***-***
を023P1A***-***,034P2B***-***,045P3C***-***
としてこの列で並べ替えを行う。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
確かめてみます。

お礼日時:2011/02/05 23:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!