人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelの並べ替えについてお願いいたします。

今、文字列(ここでは、アルファベットとします)があり、A列とB列に、
CK、D
C、G
AH、AF
CK、X
BI、CK
AF、AZ
A、C
みたいに入っています。

これを並べ替えで、
A、C
C、G
AH、AF
AF、AZ
BI、CK
CK、D
CK、X
となるようにしたいです。

つまり、B列の値とA列の値を見て、同じになるものを、順に並べるのです。
よいやり方が思いつきません。
どうぞ宜しくお願い致します。


●質問者: yoshifuku
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● TipsMemo
●100ポイント

AからZの次に,AA,AB,・・・AZ,BA,・・・となっている並びをソートしたい
ということですね。

ちょっと手間はかかりますが方法はあります。
アルファベットを数値に変換するのです。

・C列に,並び替え用のカラムを設ける。
・A列とB列のアルファベットを,数字に変換してC列に格納する。
・C列でソートする。

という流れです。

アルファベットを数字に変換する際には,1文字につき,下記の対応があると思ってください。
A:01
B:02
・・・
Z:26
これが対応表1です。

文字を指定した数字に変換excelでアルファベットを指定した数... - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10141547780


で,いまデータとして存在するのはアルファベットが2文字まで並んでいるわけですから,
上記の対応表を2文字分にくっつけます。

A:0001
B:0002
・・・
Z:0026
AA:0101
AB:0102
・・・
AZ:0126
BA:0201
BB:0202
・・・

という具合です。
これが対応表2です。
対応表2を手動で作るのは大変ですから,文字列の置換などして関数で作りましょう。

で,列Aと列Bであわせて最大4文字のアルファベットがあるわけですから
その4文字を数字に変換するために,VLOOKUPを使い
対応表2を参照するのです。

列AにAA,列BにZと入力されていれば
列Cには 01010026 という数字が入るわけです。
前半4桁が列A,後半4桁が列Bを表しているのです。

これができたら,列Cでソートします。

結果として,希望する並び替え結果が得られます。

いかがでしょうか。ちょっと複雑ですが。。。


yoshifukuさんのコメント
ありがとうございます。 実は、アルファベットは説明するための「例」でして、実際には任意の文字列です。パターン数百以上あります。同じよういけるでしょうか。

TipsMemoさんのコメント
そうでしたか。 文字列は,そのままソート可能です。ただしExcelにとってのデフォルトの辞書順としてソートされます。 自分が望む独自の並び順を設定したい ということであれば,やはりその並び順を定義して番号を振った対応表が必要になります。 つまり どんな並び順を希望されているのか がネックになります。 Zの次にAAが来るとみなす と言う場合は,Zに+1するとAAである という大小関係の定義ができればよいわけです。 「パターン数百」というのを,どうやって数値に変換するか が焦点という事になりますね。 一番いいのは,そのパターンをエクセルに貼り付けて 上から順に1,2,3と連番を付与して 対応表とすることです。 パターンに対してコード番号を付与するわけです。 住所と郵便番号の対応に似ていますね。 住所は任意の文字列ですが,7桁の番号に変換されるので ソートしやすくなるわけです。 そんなわけで,数値化・コード化のパターンを知ることが第一 と考えますが。。

yoshifukuさんのコメント
簡単にいえば、 ・A列に任意の文字列が入っている ・B列にも任意の文字列が入っている ・A列とB列をよく見ると、完全一致する文字列がある ・そのようなケースがあるので、並び替えて近づけたい(直近の位置関係にしたい) です。 いろいろなケースでこの作業を実施したいため、毎回リストを作るとかはあまり実用的ではないと考えています。別解をお待ち致します。

TipsMemoさんのコメント
う?ん・・・。 申し訳ありません。 「簡単にいえば、?です。」のくだりを理解できませんでした。 どうして理解できないかというと, 「並び替えて近づけたい(直近の位置関係にしたい)」 の意味があいまいで,どういうふうにしたいのかが伝わらないためです。 近づけるとは何でしょうか。直近とは何でしょう。 A列とB列は別々に動くのか,それとも連動して動くのか。 位置関係とは何でしょうか。 行がどうなっていることを言うのか, 列がどうなっていることを言うのか。 また, 「A列とB列をよく見ると、完全一致する文字列がある」。 これは同一行内で比較するのでしょうか。 それとも行をまたがって見比べてよいのでしょうか。 A列のどの行と,BN列のどの行を比較するのでしょうか。 などなど,言葉で説明するのには限界があります。 そのため,質問文内に掲載されたサンプルデータで最終判断するしかないのです。 そして,質問文にあるサンプルデータと並び替え結果のサンプルを正確に解釈すると,回答1のような結果になります。 そのため,お手数ですが,別のサンプルデータと並び替え結果をコメント欄にご提示いただけませんか。 量は多くなくて結構です。 たとえば,次のサンプルデータではどうなりますか。 A,B B,C C,A この場合, 1行目と2行目に「B」という完全一致文字列があり, それらの行は隣り合っていますね。 2行目と3行目には「C」と言う完全一致文字列があり, それらの行も隣り合っています。 しかし, 3行目と1行目には「A」と言う完全一致文字列があり, それらの行を隣り合わせに近づけることは不可能です。 両立できません。 こういうケースでは,どういう並び替え結果をご希望なさっているのでしょうか。

yoshifukuさんのコメント
A,B B,C C,A このケースは、ごめんなさい、存在しないですね。実は文字列がループするケースはないです。 別レコードのケツと別レコードの頭が一致するケースだけを見ます。 A,B B,C C,D こういうケースはあります。並び替えると、 C,D B,C A,B これが答えです。

TipsMemoさんのコメント
>「別レコードのケツと別レコードの頭が一致する」 >「文字列がループするケースはない」 そういうことでしたか。 C,D B,C D,X このようなケースはどうですか。ループはしていませんが・・・。

yoshifukuさんのコメント
D,X C,D B,C です。

bnnさんのコメント
C,D B,C D,X C,X B,D このケースはどうでしょうか

質問者から

並び替え結果が間違ってました。


C、G
A、C
AF、AZ
AH、AF
CK、D
CK、X
BI、CK
が正解でした。


2 ● gong1971
●100ポイント
Sub Macro1()
 
 Sheets.Add After:=Sheets(ActiveSheet.Index)
 ResSht = ActiveSheet.Name
 ActiveSheet.Previous.Select
 
 j = 1
 For i = 1 To Range("A1").End(xlDown).Row
 If Cells(i, 1) <> "" Then
 KeyStr = Cells(i, 2).Value
 Set Rng = Range("A:A").Find(What:=KeyStr)
 If Rng Is Nothing Then
 KeyStr = Cells(i, 1).Value
 Rows(i).Cut
 Sheets(ResSht).Rows(j).Insert Shift:=xlDown
 j = j + 1
 Do
 Set Rng = Range("A:A").Find(What:=KeyStr)
 If Not Rng Is Nothing Then
 Rows(Rng.Row).Cut
 Sheets(ResSht).Rows(j).Insert Shift:=xlDown
 j = j + 1
 Else
 Exit Do
 End If
 Loop
 Do
 Set Rng = Range("B:B").Find(What:=KeyStr)
 If Not Rng Is Nothing Then
 Rows(Rng.Row).Cut
 Sheets(ResSht).Rows(j).Insert Shift:=xlDown
 j = j + 1
 Else
 Exit Do
 End If
 Loop
 End If
 End If
 Next
 
End Sub

※並べ替え時に元のデータを消してしまいます。
必ずバックアップを取って実行してください。

1. 結果用のシートを挿入
2. B1の値がA列に無ければ結果用シートに移動
3. 2.で移動が行われた場合、A1の値がA列の別の行にあれば結果用シートに移動
4. 2.で移動が行われた場合、A1の値がB列にあれば結果用シートに移動
5. 2.?4.を2行目以降、最終行まで実行

こんな感じでいかがでしょうか?
処理が正しくない場合、コメント欄をご参照の上、詳細を教えてください。


gong1971さんのコメント
ちなみに上記マクロでの並べ替え結果は下記の通りです。 CK、D CK、X BI、CK C、G A、C AF、AZ AH、AF
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ