• ベストアンサー

Excelでの並べ替え

こんにちは。 1つのシート内のセルにバラバラに、数字がある場合 それらをまとめて昇順に並べ替えをすることは出来ますか? 例えば、 a-001 a-009 a-008 a-007 a-005 a-002 a-006 a-012 a-010 a-011 a-003 a-004 を a-001 a-005 a-008 a-010 a-002 a-006 a-009 a-011 a-013 a-007 a-012 a-004 と並べ替えをしたいのです。 やはり、これは1列になっていないとダメなのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.4

表示形式を【"a-"@】と設定してあったんですね・・・やられた。 てっきり文字列かと思ってました。 というわけで、書式設定に対応したマクロへ変更しました。 如何でしょう。お望みの結果になれば幸いです。 以下、マクロのソースです。 '******************** ここから ******************** Sub AreaSort()   Application.DisplayAlerts = False      Sheets.Add , ActiveSheet      Sheets(1).Select   arLeft = Selection.Column   arTop = Selection.Row   arRight = arLeft + Selection.Columns.Count - 1   arBottom = arUp + Selection.Rows.Count - 1      c = 0   For co = 0 To arRight     For ro = 0 To arBottom       wk = Cells(ro + arTop, co + arLeft).Value              If Trim(wk) <> "" Then         c = c + 1                  Sheets(2).Cells(c, 1).NumberFormatLocal = "@"         Sheets(2).Cells(c, 1).FormulaR1C1 = "'" & CStr(wk)       End If     Next   Next   Sheets(2).Select   Columns("A:A").Select   Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _     OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _     :=xlPinYin   Sheets(1).Select   c = 0   For co = 0 To arRight     For ro = 0 To arBottom       wk = Cells(ro + arTop, co + arLeft).Value              If Trim(wk) <> "" Then         c = c + 1         Cells(ro + arTop, co + arLeft).FormulaR1C1 = CStr(Sheets(2).Cells(c, 1).Value)       End If     Next   Next   Sheets(2).Select   ActiveWindow.SelectedSheets.Delete      Application.DisplayAlerts = True End Sub '******************** ここまで ********************

Momozo
質問者

お礼

出来ましたっ!!! ありがとうございますっ! ホント、説明不足で何度もすみませんでした。 (自分も良くわかっていないものを説明するのは難しいですね。) こんなワタシにお付き合い下さって、感謝、感謝です。 本当にありがとうございました!

その他の回答 (3)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.3

汚いソースですが、べたな操作をマクロにしてみました。如何でしょうか? 使用方法:  ソートしたい範囲を範囲選択して、マクロを実行。 質問にあるような順序でソートします。 以下、マクロのソースです。 '******************** ここから ******************** Sub AreaSort()   Application.DisplayAlerts = False      Sheets.Add , ActiveSheet      Sheets(1).Select   arLeft = Selection.Column   arTop = Selection.Row   arRight = arLeft + Selection.Columns.Count - 1   arBottom = arUp + Selection.Rows.Count - 1      c = 0   For co = 0 To arRight     For ro = 0 To arBottom       wk = Cells(ro + arTop, co + arLeft).Value              If Trim(wk) <> "" Then         c = c + 1                  Sheets(2).Cells(c, 1).Value = wk       End If     Next   Next   Sheets(2).Select   Columns("A:A").Select   Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _     OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _     :=xlPinYin   Sheets(1).Select   c = 0   For co = 0 To arRight     For ro = 0 To arBottom       wk = Cells(ro + arTop, co + arLeft).Value              If Trim(wk) <> "" Then         c = c + 1         Cells(ro + arTop, co + arLeft).Value = Sheets(2).Cells(c, 1).Value       End If     Next   Next   Sheets(2).Select   ActiveWindow.SelectedSheets.Delete      Application.DisplayAlerts = True End Sub '******************** ここまで ********************

Momozo
質問者

お礼

お手数をおかけしました!ありがとうございます!!!! このマクロでやってみました。 マクロ自体の内容は私にはさっぱりわからないのですが出来ました。 ですが、1つだけ質問させて頂いてよろしいですか? このセルは書式設定で表示形式を【"a-"@】としてありまして、 数字だけ入れれば「a-001」と表示される様になっています。 で、このマクロを実行するとその表示が消えてしまうのです。 でも書式設定の中を見ると設定はそのままです。 しかし、セルの中にある数字は001です。?? ・・・昇順には並べられたので良いのですが、これを元に この番号の順番のままのラベルを作りたいのです。 ちょっと量が膨大なので、出来ればマクロ実行後のデータを ラベル製作に使用したいです。 わがまま言いましてすみませんが、もしおわかりになりましたら 再度回答いただけますでしょうか? よろしくお願いします。

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

補足を見たがまだ良く判らないので。 A列は4行、B列、C列は3行、D列は2行になっているのは どう言うところから来るのですか。 ソート前がそうなっているからですか。 VBAで(ブランクを除く)全セルデータをソートし、A,B、C,D列に詰めるデータ数(行数)が判っておれば、順に セルに入れていけますが。 データ数はいくらぐらいですか。 昨日データを1列に並べる関数を回答したが、 それを使って手作業で、埋めこんだ方が速いでしょう。 ABCD列とも同じ行数なら、一旦1列にしてソートした 結果のデータを関数でABCD列に分けることが出きるかもしれない。

Momozo
質問者

お礼

>A列は4行、B列、C列は3行、 となっていますのは、入力された時点でそうなってるんです。 例えば、東京の製品番号がA列、大阪のものがB列、福岡のものがC列という感じです。それぞれの場所で製品数が違うので・・・。1~100の製品番号の中には 大阪のものもあれば東京のものもあります。 で、それを製品番号の昇順に並べたいのです。 でも、だいたいBlueRayさんの回答ので出来ました。 ありがとうございました。

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.1

どのように昇順に並んでいるのでしょうか? 規則性がよくわからないですよ。元と後が不一致!

Momozo
質問者

補足

ホントだ・・・。 すみません、間違ってました・・・。 a-001 a-009 a-008 a-007 a-005 a-002 a-006 a-012 a-010 a-011 a-003 a-004 を ::: --A-- --B-- --C-- --D-- -1- a-001 a-005 a-008 a-011 -2- a-002 a-006 a-009 a-012 -3- a-003 a-007 a-010 xxxxx -4- a-004 xxxxx xxxxx xxxxx です。 「--A-- / -1-」はセル番号です。(ちょっとずれてるかもしれません。) xxxxxx は空白を意味してます。 A1からD4までのセル内にある数字(文字)を 昇順に並べることは出来ますか?(ブランクのセルもある) 説明がわかりづらくてすみません・・・。 よろしくお願いします。

関連するQ&A