今、文字列(ここでは、アルファベットとします)があり、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列の値を見て、同じになるものを、順に並べるのです。
よいやり方が思いつきません。
どうぞ宜しくお願い致します。
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でソートします。
結果として,希望する並び替え結果が得られます。
いかがでしょうか。ちょっと複雑ですが。。。
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行目以降、最終行まで実行
こんな感じでいかがでしょうか?
処理が正しくない場合、コメント欄をご参照の上、詳細を教えてください。
ちなみに上記マクロでの並べ替え結果は下記の通りです。
CK、D
CK、X
BI、CK
C、G
A、C
AF、AZ
AH、AF
D,X
2015/07/29 11:44:15C,D
B,C
です。
C,D
2015/07/29 13:37:38B,C
D,X
C,X
B,D
このケースはどうでしょうか