• 締切済み

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

数字とアルファベットが混在したコードにソートをかけたいと思っています。 (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/17068)
回答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
質問者

お礼

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

  • xyz37005
  • ベストアンサー率51% (362/706)
回答No.1

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

norineko
質問者

お礼

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

関連するQ&A

  • エクセルでのソート

    エクセル2000を使っています、ソートについて質問させていただきます。 例えば、 88J001・・・88J055 88N001・・・88N011 88A001・・・88A0088 8K001・・・88K020と有る名簿を(上から下に並んでいます)、 左から3文字目に有るアルファベットを最優先キーに、数字3桁を2番目に優先するキーにし、アルファベット順ではなく、K、N、J、A、Hと有るようにソートしたいのですが、どのような操作をすればよろしいでしょうか?

  • またまたエクセルの関数?ソート??

    甘えてすみません。またご指導願います。 A A A A B C C C D E E F というようなリストがあります。 このリストから B D F だけを省く。 (一回しかでてこない数字を全て省く) というような方法はありますでしょうか? A,B,C,D,E,Fはそれぞれ7桁の数字です。 同じアルファベットは、同じ数字です。 横のセルにも必要情報が入っています。 意味解っていただけるでしょうか・・・・・ すみません・・

  • エクセルの文字列並べ替えについて

    エクセルの文字列並べ替えについて エクセル2000です。 半角文字列の数字とアルファベットを通常のエクセルの機能で昇順で並べ替えた場合 012 013 111 1AA 1B1 211 222 22C 23A 2AB 2BC のように並ぶと思います。(ここでの数字は数値でなく、すべて文字列です) 数字→アルファベットの順番のようです。 これを「アルファベット」→「数字」の順番で並べ替える方法はないでしょうか? 以下のような順にです。 ユーザー定義のリストに基づいた並べ替えがあることは存じていますが、3桁だけでも英数混在だと36×36×36=46,656個のリストを登録しなければならないことになり、現実的と思えません。 目的は、ホストコンピュータから出力される紙のデータがなぜかこのような順で出てきて、それにエクセルで作成したデータをあわせる必要が出てきたためです。 012 013 1AA 1B1 111 2AB 2BC 211 22C 222 23A エクセルの一般機能でもVBAでもかまいません。ご教示いただけると幸いです。

  • ユーザIDのソート

    WebアプリのログインIDとして、CHAR型7桁で A0001~A000100(5桁~7桁) としているのですが、ユーザIDでソートした際に うまく並ばないんです。 ユーザ一覧をソートしようとした際に、 「A0001」「A0002」・・・「A00010」などと表示したいのに、ユーザIDでSELECTしてくると、 「A0001」「A00010」「A00011」「A00012」「A00013」となってしまい困っています。 うまくソートする方法は無いでしょうか? アドバイスをよろしくお願いいたします。 ※先頭は、アルファベットなので数字としてソートできないですし、IDは、7桁固定で0パディングするというのも出来ないんです。

  • Excel同一セル内の、アルファベットと数字を別々のセルに置き換える方法を教えてください

    ExcelのA列のセルに、アルファベットと数字の組み合わせが3000行くらい入っています。 アルファベットは1~5個でA~Z、 数字は1~3個で0~9  全て半角です。 の組み合わせです。アルファベットと数字の配置は A1    A12    A123 AB1 AB12 AB123 HD167 SDM12 WB987 の組み合わせです。 (アルファベットと数字はそれぞれまとまっていて、入り混じることはありません) これを、   A  B  C   1 A1  A   1 2 A12 A 12 3 A123 A 123 4 AB1 AB 1 のように、アルファベットと数字を別々にセルに置き換えたいのです。 マクロを使わず、B列以降のセルを使って関数でできないでしょうか? よろしくお願いいたします。

  • エクセルのソートについて

    こんにちは いつもお世話になっています。 エクセルのソートに関して教えてください。 A列に商品名(ふりがな情報あり)、B列に一桁と二桁の数字(標準表示形式)があります。 ソートの優先順位を第一がB列の下一桁の数字、第二がA列の商品名にする方法を教えてください。 よろしくお願いします。

  • どのようにソートすればいいのか教えて下さい

    AとBとCにそれぞれ数値を与えておいて、その数値の大きい順にABCを並べ替えるようにしたいのです。一応、下のようにアルファベットと数値の間にはカンマを入れて分けています。 A, 5-------→B, 9 B, 9-------→C, 7 C, 7-------→A, 5 このように並べ替えたいのですが、うまくいきません。ArrayListを使用しCollectionsクラスのsortメソッドを使ってやれば先頭の文字によるソートはできるのですが、カンマ後の数値での並べ替えの方法がよくわかりません。 いい法方がありましたらおしえてください。

    • ベストアンサー
    • Java
  • Excel同一セル内の、アルファベットと数字の順番を入れ替えについて教えてください

    ExcelのA列のセルに、アルファベットと数字の組み合わせが3000行くらい入っています。 アルファベットは1~3個でA~Z、 数字も1~3個で0~9 の組み合わせです。アルファベットと数字の配置は A1    A12    A123 AB1 AB12 AB123 ABC1 ABC12 ABC123 の9通りか、数字が先にくる場合の9通りのいずれかです。 (アルファベットと数字はそれぞれまとまっていて、入り混じることはありません) これを、 1A 123ABC  のように、数字を前に持ってくるように統一したいのです。 もともと数字が前に入っているセルはそのままで有効です。 マクロを使わず、B列以降のセルを使って関数でできないでしょうか? ご説明がうまくできなくて申し訳ないです。 よろしくお願いいたします。

  • エクセル ソート

    当方、エクセル2010、Windows7の環境です。 エクセルで 「A列」「B列」 「1」「X」 「1」「」 「2」「Y」 「1」「Z」 というように、「A列」に数字が 「B列」には文字が入っています。 ただし、「B列」には何も入っていないこともあります。 この「A列」を第一、「B列」を第二優先順位で ソートすると、 「1」「X」 「1」「Z」 「1」「」 というように、何も入っていない行が 一番下にきてしまいます。 「B列」に何も入っていないのですから、 「1」のかたまりのなかで 一番上にきそうですが、 一番下にきてしまいます。 これを 「1」「」 「1」「X」 「1」「Z」 の順番にソートすることは可能でしょうか?

  • エクセルでのソートがうまくいきません

    エクセル2000を使っています。 VLOOKUP関数を利用して見積書を作っていますが、時たま上手くいかない事があります。 見積書は、 見積書のページに A列:数字4桁の商品コード B列:商品名 C列:単価 (例:1001 アイスクリーム 1,500) 商品コードのページも全く同じで、A列でソートしてあります。 VLOOKUPを使って、見積書のA列の4桁の数字に対応した商品コードのB列C列からデータを持ってくるようにして、見積もり書のB列とC列をうめる・・・という簡単な仕組みです。 ところが、なぜかB列とC列にうまくデータを持ってこられない行がいくつか出てくる事があります。(#N/Aと表示される) ちなみに、見積書も商品コードもA列のセルは文字列に設定しています。 また、変換できなかったA列の数字を上書きして入力すると半分くらいはB列C列が#N/Aから本来のデータになるのですが、相変わらず変化なしの場合もあります。 そのような場合は、見積書のA列に商品コードのA列をコピーしたものを貼り付けて上書きするとちゃんと表示できるようになります。 この場合の見積書は、過去に作ったいろんな店舗への見積書を行追加して新たに作った「年間の見積書の全て」といった物なので、時によってA列のセルの性格が違っている場合があるかも・・・という訳で改めてA列を文字列に設定し直しています。 が、これをやってもA列での並べ替えもうまく昇順にならない場合がありますので、やはりセルによっては統一されていない部分があるのかと調べてみましたが全て同じく文字列になっています。 どうにも訳が判りません。 長い文章で申し訳ありませんが、御判りの方がおいででしたら後教授ください。

専門家に質問してみよう