dポイントプレゼントキャンペーン実施中!

数字とアルファベットが混在したコードにソートをかけたいと思っています。
(A~Z、0~9の順にしたい)

ユーザー設定リストで新しいリストを登録するんだろうな…までは分かるんですが、やってみてもうまくいきません。

私が試したのは、A、B、C…7、8、9と順に一桁です。
ソートをかけたいコードは*******-*という形です。

A 回答 (6件)

こんばんは。



<標準モジュール>
というのは、場所のことです。

Alt キーを押しながら、F11 を押すと、Visual Basic Editor 画面が出てきます。そこで、メニューの[挿入]-[標準モジュール(M)]をクリックしますと、白い画面が現れます。そこに、切り取り線の中のコードを貼り付けます。Web上から直接でも可能です。

後は、同じく、Alt キーを押しながらF11 を押すと、元の画面に戻りますので、

最初に、マウスポインターを、並び替えるをするデータの
左上でも置いてから、

[ツール]-[マクロ]-[マクロ]- SortStringPriority
をクリックすれば、並び替えるはずです。こちらのデータではうまく行っています。

なお、フォーム・ツールのボタンに、このマクロを登録しておけば、メニューから、マクロを呼び出さなくても稼動します。
    • good
    • 0
この回答へのお礼

遅くなって申し訳ありません。
たびたびありがとうございます。

実践してみましたが、A1のデータだけ並び替えられません。
どうしてでしょう?

マウスポインタをデータのどこかに置いて実行しても同じです。

お礼日時:2005/07/28 22:25

#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  

に換えてください。
    • good
    • 0

こんにちは。



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

'---------------------------------------------------------
    • good
    • 0
この回答へのお礼

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

返事が遅くなり申し訳ありません。
私の技術が未熟で、エクセルのマクロをいじってみましたがよく分かりませんでした。

この標準モジュールをどこかにコピーすればいいんでしょうか?

お礼日時:2005/07/14 16:12

>一桁です。


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)
のような書き方もできます。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2005/07/09 21:25

こんにちは。

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です。

作業列は非表示にしておいても構いません。
なお、一緒に並べ替えるので離れた場所に作業列があるとやりにくいかも知れません。
    • good
    • 0
この回答へのお礼

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

希望のソートができました!
細かく丁寧に教えていただいてありがとうございました。

ただソートは毎月発生する作業なので、この長~い式を毎回コピーしながらするのは大変ですね。
…というか最初の入力も(笑)

とりあえずはこの方法でしのぐとして、ユーザー設定リストなどで、何回もカンタンにソートできる方法は
ないんでしょうかね。

お礼日時:2005/07/09 21:32

>ユーザー設定リストで新しいリストを登録するんだろうな…までは分かるんですが、やってみてもうまくいきません。


というのは、もしかして
A~Zはリストに入るが0~9はリストに入らない
ってことでしょうか?
もしそうなら数字は先頭に『'』をつけてみてください。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2005/07/09 21:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています