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

Excelの並び替えに関する質問です。良い回答は、250?450ポイント差し上げます。
並び順を以下のようなルールで並び替えたいの思います。
数字(半角全角)→英字(半角全角)→ひらがな/漢字→カタカナ(半角全角)
※Unicodeに変換して上記の順に並び替えを行っていますが、
ひらがな・漢字・カタカナ部分があいうえお順にならなく困っております。

【理想の並び替え】
1048キティ
2ワンピース
LOVE
きゃらえっぐ
宇宙人ST
仮面ライダー
アイミク
ポケモンキッス

マクロでの回答は、ソースも記述願います。
どうか宜しくお願いします。

●質問者: anim130M
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:Excel LOVE ST Unicode あいうえお
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● きゃづみぃ
●55ポイント

この場合、並び替え用に キーを作ってあげればいいです。

たとえば 数字の場合は 頭に 0をつける。

アルファベットは 1

ひらがなは 2

漢字は 3

カタカナは 4

というように。

↓こんな感じです。

01048キティ

02ワンピース

1LOVE

2きゃらえっぐ

3宇宙人ST

3仮面ライダー

4アイミク

4ポケモンキッス

◎質問者からの返答

回答ありがとうございました。

2文字目以降の並びが、

数字(半角全角)→英字(半角全角)→ひらがな/漢字→カタカナ(半角全角)にすることは難しいのですね。


2 ● きゃづみぃ
●0ポイント

このあとよくよく考えてみたのですが、最初の回答は 暫定的なもので 最初の一文字にしか対応できないものとしてください。

2文字目以降は 同じルールでは 並び替えられません。


3 ● SALINGER
●55ポイント

あらかじめ選択した範囲を、質問文の条件でソートするマクロです。

(複数列を選択した場合は一番左側の列がソートされます)

Sub mySort()
 Application.ScreenUpdating = False
 Dim i As Long
 Dim j As Long
 Dim lastRow As Long
 Dim sc As Long
 Dim sr As Long
 
 sc = Selection.Column
 sr = Selection.Row
 
 Selection.Sort key1:=Cells(sr, sc), order1:=xlAscending
 lastRow = Cells(sr + Selection.Rows.Count - 1, sc).End(xlUp).Row
 
 j = sr
 For i = sr To lastRow
 If Left(Cells(j, sc).Value, 1) Like "[ア-ン]" Or Left(Cells(j, sc).Value, 1) Like "[ア-ン]" Then
 Cells(lastRow + 1, sc).Insert Shift:=xlDown
 Cells(lastRow + 1, sc).Value = Cells(j, sc).Value
 Cells(j, sc).Delete Shift:=xlUp
 Else
 j = j + 1
 End If
 Next
 Application.ScreenUpdating = True
End Sub
◎質問者からの返答

回答ありがとうございます。

A列からO列まで範囲があり、D列を基準にソート対象であった場合、

どの部分を変更すればよろしいでしょうか?


4 ● きゃづみぃ
●0ポイント

SALINGERさんのプログラムで

Selection.Sort key1:=Cells(sr, sc), order1:=xlAscending

Selection.Sort Key1:=Cells(sr, 4), Order1:=xlAscending

に変えると D列になりますが

あ1048キティ

あ2ワンピース

あLOVE

あきゃらえっぐ

あ宇宙人ST

あ仮面ライダー

あアイミク

あポケモンキッス

とかいう場合は、2文字目では ソートされません。

◎質問者からの返答

回答ありがとうございます。

この部分は、

Range("○○:○○").Sort key1:=Range("○○"), order1:=xlAscending で対応いたしました。


5 ● SALINGER
●0ポイント

私の回答をわかっていない他の人が、できないと回答するという状況がいまいちよくわかりませんが、

それは置いておいて、私の回答は(複数列を選択した場合は一番左側の列がソートされます)と

書いてあるように1列だけのソートです。


それは複数列にするとキーとなる列をどうするかとか問題となるので簡略化した為ですが、

ご要望に答えて複数列で任意のキー列でソートするようにしてみます。

最初の方のkeyという値が選択範囲の何列目をキーとするかという値です。


>A列からO列まで範囲があり、D列を基準にソート対象であった場合

A列からO列を選択して、keyの値を4にしてください。


Sub mySort()
 Application.ScreenUpdating = False
 Const key As Integer = 4
 Dim i As Long
 Dim j As Long
 Dim lastRow As Long
 Dim sc As Long
 Dim sr As Long
 
 If Selection.Columns.Count < key Then
 MsgBox "キー列が不正です"
 Exit Sub
 End If
 
 sc = Selection.Column
 sr = Selection.Row
 
 Selection.Sort key1:=Cells(sr, sc + key - 1), order1:=xlAscending
 lastRow = Cells(sr + Selection.Rows.Count - 1, sc).End(xlUp).Row
 
 j = sr
 For i = sr To lastRow
 If Left(Cells(j, sc).Value, 1) Like "[ア-ン]" Or Left(Cells(j, sc).Value, 1) Like "[ア-ン]" Then
 Range(Cells(lastRow + 1, sc), Cells(lastRow + 1, sc + Selection.Columns.Count - 1)).Insert Shift:=xlDown
 Range(Cells(j, sc), Cells(j, sc + Selection.Columns.Count - 1)).Copy Cells(lastRow + 1, sc)
 Range(Cells(j, sc), Cells(j, sc + Selection.Columns.Count - 1)).Delete Shift:=xlUp
 Else
 j = j + 1
 End If
 Next
 Application.ScreenUpdating = True
End Sub
◎質問者からの返答

2文字目以降の並びが、

数字(半角全角)→英字(半角全角)→ひらがな/漢字→カタカナ(半角全角)にならないのですね。。

データには、こんなのが複雑に入っていて、下のような並びにしたいです。

※ちなみにUnicodeにすると、並び替えられます。

2ARASHI

2Angel

2D-STYLE

2DB改


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



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