• 締切済み

エクセルのソートで、数字よりもアルファベットを優先したい

数字とアルファベットが混在したコードにソートをかけたいと思っています。 (A~Z、0~9の順にしたい) ユーザー設定リストで新しいリストを登録するんだろうな…までは分かるんですが、やってみてもうまくいきません。 私が試したのは、A、B、C…7、8、9と順に一桁です。 ソートをかけたいコードは*******-*という形です。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 <標準モジュール> というのは、場所のことです。 Alt キーを押しながら、F11 を押すと、Visual Basic Editor 画面が出てきます。そこで、メニューの[挿入]-[標準モジュール(M)]をクリックしますと、白い画面が現れます。そこに、切り取り線の中のコードを貼り付けます。Web上から直接でも可能です。 後は、同じく、Alt キーを押しながらF11 を押すと、元の画面に戻りますので、 最初に、マウスポインターを、並び替えるをするデータの 左上でも置いてから、 [ツール]-[マクロ]-[マクロ]- SortStringPriority をクリックすれば、並び替えるはずです。こちらのデータではうまく行っています。 なお、フォーム・ツールのボタンに、このマクロを登録しておけば、メニューから、マクロを呼び出さなくても稼動します。

norineko
質問者

お礼

遅くなって申し訳ありません。 たびたびありがとうございます。 実践してみましたが、A1のデータだけ並び替えられません。 どうしてでしょう? マウスポインタをデータのどこかに置いて実行しても同じです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

#4 の Wendy02 です。 実害はありませんが、みっともないので、訂正します。 訂正 #For i = 0 To 10  ← ● #  c.Value = Replace(c.Value, Chr(177 + i), i) # Next i #Next 下から6行目 For i = 0 To 9   に換えてください。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 Excelの 達人の方たちが、ダメだったとすると、もう、マクロ処理でしかないのかと思います。 >私が試したのは、A、B、C…7、8、9と順に一桁です。 >ソートをかけたいコードは*******-*という形です。 これでは、読み手側の想像の範囲でしかありません。こういうスタイルの表示ですと、解答に結びつかないかもしれません。本来は、データ・サンプルがほしいですね。 まず、今のところ、全部、半角であることを想定しています。そうしないと、かなりややこしくなります。 ともかく、こちらの想像の中で、マクロを作ってみました。マウスポインタを並び替えする列のどこかにおいてから、マクロを実行してください。また、フィールド名(1行目のタイトル)は、必ず、存在するものとして、実行されます。 なお、フォームボタンなどに取り付けると良いかと思います。 '--------------------------------------------------------- '<標準モジュール> Sub SortStringPriority() Dim Rng As Range, c As Range, i As Integer If IsEmpty(ActiveCell) Then Exit Sub Set Rng = Range(ActiveCell.End(xlUp), _      Cells(65536, ActiveCell.Column).End(xlUp)) Rng.NumberFormatLocal = "@" Application.ScreenUpdating = False For Each c In Rng  For i = 0 To 10   c.Value = Replace(c.Value, i, Chr(177 + i))  Next i Next Rng.Sort Key1:=Rng.Range("A2"), _     Order1:=xlAscending, _     Header:=xlYes, _     OrderCustom:=1, _     MatchCase:=False, _     Orientation:=xlTopToBottom For Each c In Rng  For i = 0 To 10   c.Value = Replace(c.Value, Chr(177 + i), i)  Next i Next Application.ScreenUpdating = True End Sub '---------------------------------------------------------

norineko
質問者

お礼

ご回答ありがとうございます。 返事が遅くなり申し訳ありません。 私の技術が未熟で、エクセルのマクロをいじってみましたがよく分かりませんでした。 この標準モジュールをどこかにコピーすればいいんでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

>一桁です。 1桁であることを好都合に別列に=IF(CODE(MID(A1,8,1))>64,CODE(MID(A1,8,1)),CODE(MID(A1,8,1))+130) をつくり、この列とともにソートする。130は90-48+1より大であれば他の数でよい。 コンピュターは文字コードの順に並べます。ソフトがうまく便利に並べているように見えるのは、ソフトが修正ソートキーを別に見えないところで作ってくれているからです。 もっとルール性のない並び順なら、VLOOKUPでも使って、キーを別途 の列に作って、その列でソートすればよい。 表の定義の列を使いたくなければ、少数ならば =VLOOKUP(A11,{"秋",1;"春",2;"夏",3},2,FALSE) のような書き方もできます。

norineko
質問者

お礼

ご回答ありがとうございます。 教えていただいたやり方で試してみましたが、できませんでした。 ソートをかけたいコードが、一桁ではなかったからでしょうか…

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 多分、ユーザー設定リストでは出来ないと思います。 以下、作業列と名前定義を利用した方法です。 仮にデータがA1~Axxxにあるとします。 データの先頭(A1)をクリックして、メニューの[挿入]→[名前]→[定義]で、 [名前]:適当な名前(仮に「変換1」とします。) [参照範囲]:「=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($A1,"0","あ"),"1","い"),"2","う"),"3","え"),"4","お")」 と設定して[追加]します。 (参照範囲の中の「$A1」はデータの先頭位置(A1)に頭に"$"を付けたものです。データ位置によって適宜修正して下さい。) さらにもう1つ、 [名前]:適当な名前(仮に「変換2」とします。) [参照範囲]:「=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(変換1,"5","か"),"6","き"),"7","く"),"8","け"),"9","こ")」 と設定して[OK]します。 そうしたら、どこか適当な列を作業列として、そこに、 =変換2 と入力すると、同一行のデータの中の数字が、 0→あ 1→い ・・・ 9→こ と置換されて表示されますので、下へデータ行分コピーします。 これでデータ列とこの作業列を一緒に、作業列をキーにして並べ替えればOKです。 作業列は非表示にしておいても構いません。 なお、一緒に並べ替えるので離れた場所に作業列があるとやりにくいかも知れません。

norineko
質問者

お礼

ご回答ありがとうございます。 希望のソートができました! 細かく丁寧に教えていただいてありがとうございました。 ただソートは毎月発生する作業なので、この長~い式を毎回コピーしながらするのは大変ですね。 …というか最初の入力も(笑) とりあえずはこの方法でしのぐとして、ユーザー設定リストなどで、何回もカンタンにソートできる方法は ないんでしょうかね。

回答No.1

>ユーザー設定リストで新しいリストを登録するんだろうな…までは分かるんですが、やってみてもうまくいきません。 というのは、もしかして A~Zはリストに入るが0~9はリストに入らない ってことでしょうか? もしそうなら数字は先頭に『'』をつけてみてください。

norineko
質問者

お礼

ご回答ありがとうございます。 0~9はリストに入力できていました。 ただの0~9を入れていたので、『'』をつけて試してみましたが、希望のソートはできませんでした。

関連するQ&A