並び順を以下のようなルールで並び替えたいの思います。
数字(半角全角)→英字(半角全角)→ひらがな/漢字→カタカナ(半角全角)
【理想の並び替え】
A列 B列
1 012ディズニー ーーー
2 2GODBABY ーーー
3 2おいなり ーーー
4 2豆しば ーーー
5 2クロネミニノート ーーー
6 BIG ーーー
7 にゃんぱい ーーー
8 仮面ライダー ーーー
9 コアラのマーチ ーーー
マクロでの回答は、ソースも記述願います。
どうか宜しくお願いします。
マクロでソート用の文字列を計算する関数を用意し、空いている列(例えばC列)に格納します。その上で、C列をキーにしてソートします。
マクロは、標準モジュールに追加してください。(VBAエディタで、ファイル名の上で右クリックし、挿入→標準モジュール)
Function SortIndex(ByVal src As String) As String Dim i As Long SortIndex = "_" For i = 1 To Len(src) SortIndex = SortIndex & Right$("000" & Hex$(AscW(StrConv(Mid$(src, i, 1), vbNarrow))), 4) Next i End Function
Unicodeでのコード順が半角数字→半角英字→ひらがな→漢字→半角カタカナであることを利用してプログラムを簡略化しています。
★入力例(C列に数式を入力)
A | B | C | |
1 | 012ディズニー | --- | =SortIndex(A1) |
2 | 2GODBABY | --- | =SortIndex(A2) |
3 | 2おいなり | --- | =SortIndex(A3) |
4 | 2豆しば | --- | =SortIndex(A4) |
5 | 2クロネミニノート | --- | =SortIndex(A5) |
6 | BIG | --- | =SortIndex(A6) |
7 | にゃんぱい | --- | =SortIndex(A7) |
8 | 仮面ライダー | --- | =SortIndex(A8) |
9 | コアラのマーチ | --- | =SortIndex(A9) |
★実際の表示(数式の計算後。C列でソートします)
A | B | C | |
1 | 012ディズニー | --- | _003000310032FF83FF9EFF68FF7DFF9EFF86FF70 |
2 | 2GODBABY | --- | _00320047004F00440042004100420059 |
3 | 2おいなり | --- | _0032304A3044306A308A |
4 | 2豆しば | --- | _00328C4630573070 |
5 | 2クロネミニノート | --- | _0032FF78FF9BFF88FF90FF86FF89FF70FF84 |
6 | BIG | --- | _004200490047 |
7 | にゃんぱい | --- | _306B3083309330713044 |
8 | 仮面ライダー | --- | _4EEE9762FF97FF72FF80FF9EFF70 |
9 | コアラのマーチ | --- | _FF7AFF71FF97306EFF8FFF70FF81 |
同じ文字種内での半角と全角は順不同になります。例えば、半角数字と全角数字は同一視されます。半角数字→全角数字のような並び替えを期待する場合は、仕様が変わります。
また、ソート用の列を作らず全部マクロで行うことも可能ですが、プログラムは少し長くなります。ご要望があれば回答します。
マクロでソート用の文字列を計算する関数を用意し、空いている列(例えばC列)に格納します。その上で、C列をキーにしてソートします。
マクロは、標準モジュールに追加してください。(VBAエディタで、ファイル名の上で右クリックし、挿入→標準モジュール)
Function SortIndex(ByVal src As String) As String Dim i As Long SortIndex = "_" For i = 1 To Len(src) SortIndex = SortIndex & Right$("000" & Hex$(AscW(StrConv(Mid$(src, i, 1), vbNarrow))), 4) Next i End Function
Unicodeでのコード順が半角数字→半角英字→ひらがな→漢字→半角カタカナであることを利用してプログラムを簡略化しています。
★入力例(C列に数式を入力)
A | B | C | |
1 | 012ディズニー | --- | =SortIndex(A1) |
2 | 2GODBABY | --- | =SortIndex(A2) |
3 | 2おいなり | --- | =SortIndex(A3) |
4 | 2豆しば | --- | =SortIndex(A4) |
5 | 2クロネミニノート | --- | =SortIndex(A5) |
6 | BIG | --- | =SortIndex(A6) |
7 | にゃんぱい | --- | =SortIndex(A7) |
8 | 仮面ライダー | --- | =SortIndex(A8) |
9 | コアラのマーチ | --- | =SortIndex(A9) |
★実際の表示(数式の計算後。C列でソートします)
A | B | C | |
1 | 012ディズニー | --- | _003000310032FF83FF9EFF68FF7DFF9EFF86FF70 |
2 | 2GODBABY | --- | _00320047004F00440042004100420059 |
3 | 2おいなり | --- | _0032304A3044306A308A |
4 | 2豆しば | --- | _00328C4630573070 |
5 | 2クロネミニノート | --- | _0032FF78FF9BFF88FF90FF86FF89FF70FF84 |
6 | BIG | --- | _004200490047 |
7 | にゃんぱい | --- | _306B3083309330713044 |
8 | 仮面ライダー | --- | _4EEE9762FF97FF72FF80FF9EFF70 |
9 | コアラのマーチ | --- | _FF7AFF71FF97306EFF8FFF70FF81 |
同じ文字種内での半角と全角は順不同になります。例えば、半角数字と全角数字は同一視されます。半角数字→全角数字のような並び替えを期待する場合は、仕様が変わります。
また、ソート用の列を作らず全部マクロで行うことも可能ですが、プログラムは少し長くなります。ご要望があれば回答します。
回答ありがとうございます。
表には3000行の計算式を入れているためか、A列が空であってもソートされてしまいました。
どのように回避すればよろしいでしょうか?
回答ありがとうございます。
表には3000行の計算式を入れているためか、A列が空であってもソートされてしまいました。
どのように回避すればよろしいでしょうか?