- ベストアンサー
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列になっていないとダメなのでしょうか? よろしくお願いします。
- みんなの回答 (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 '******************** ここまで ********************
その他の回答 (3)
- BlueRay
- ベストアンサー率45% (204/453)
汚いソースですが、べたな操作をマクロにしてみました。如何でしょうか? 使用方法: ソートしたい範囲を範囲選択して、マクロを実行。 質問にあるような順序でソートします。 以下、マクロのソースです。 '******************** ここから ******************** 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 '******************** ここまで ********************
お礼
お手数をおかけしました!ありがとうございます!!!! このマクロでやってみました。 マクロ自体の内容は私にはさっぱりわからないのですが出来ました。 ですが、1つだけ質問させて頂いてよろしいですか? このセルは書式設定で表示形式を【"a-"@】としてありまして、 数字だけ入れれば「a-001」と表示される様になっています。 で、このマクロを実行するとその表示が消えてしまうのです。 でも書式設定の中を見ると設定はそのままです。 しかし、セルの中にある数字は001です。?? ・・・昇順には並べられたので良いのですが、これを元に この番号の順番のままのラベルを作りたいのです。 ちょっと量が膨大なので、出来ればマクロ実行後のデータを ラベル製作に使用したいです。 わがまま言いましてすみませんが、もしおわかりになりましたら 再度回答いただけますでしょうか? よろしくお願いします。
- imogasi
- ベストアンサー率27% (4737/17070)
補足を見たがまだ良く判らないので。 A列は4行、B列、C列は3行、D列は2行になっているのは どう言うところから来るのですか。 ソート前がそうなっているからですか。 VBAで(ブランクを除く)全セルデータをソートし、A,B、C,D列に詰めるデータ数(行数)が判っておれば、順に セルに入れていけますが。 データ数はいくらぐらいですか。 昨日データを1列に並べる関数を回答したが、 それを使って手作業で、埋めこんだ方が速いでしょう。 ABCD列とも同じ行数なら、一旦1列にしてソートした 結果のデータを関数でABCD列に分けることが出きるかもしれない。
お礼
>A列は4行、B列、C列は3行、 となっていますのは、入力された時点でそうなってるんです。 例えば、東京の製品番号がA列、大阪のものがB列、福岡のものがC列という感じです。それぞれの場所で製品数が違うので・・・。1~100の製品番号の中には 大阪のものもあれば東京のものもあります。 で、それを製品番号の昇順に並べたいのです。 でも、だいたいBlueRayさんの回答ので出来ました。 ありがとうございました。
- BlueRay
- ベストアンサー率45% (204/453)
どのように昇順に並んでいるのでしょうか? 規則性がよくわからないですよ。元と後が不一致!
補足
ホントだ・・・。 すみません、間違ってました・・・。 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までのセル内にある数字(文字)を 昇順に並べることは出来ますか?(ブランクのセルもある) 説明がわかりづらくてすみません・・・。 よろしくお願いします。
お礼
出来ましたっ!!! ありがとうございますっ! ホント、説明不足で何度もすみませんでした。 (自分も良くわかっていないものを説明するのは難しいですね。) こんなワタシにお付き合い下さって、感謝、感謝です。 本当にありがとうございました!