- ベストアンサー
エクセルでのソート方法と注意点
- エクセルでのソート方法について教えてください。複数シートに複数グループがあり、各グループの件数が不一致です。
- エクセルでのグループごとのソート方法について教えてください。複数シートにグループがあり、各グループの件数が異なります。
- エクセルのデータを簡単に同一基準でソートする方法を教えてください。複数シートに複数グループがありますが、各シートのグループ件数が不一致です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
例えばこういう事をよくやりますという事例: グループ間には「空行」が数行あって仕切られている(空白行によって,グループの範囲を識別できる)。 各グループの1行目には「グループA」などと記入されている サンプルマクロ: sub macro1() dim w as worksheet dim h as range for each w in worksheets for each h in w.range("A:A").specialcells(xlcelltypeconstants).areas h.entirerow.sort _ key1:=h.range("B1"), order1:=xlascending, _ key2:=h.range("C1"), order2:=xlascending, _ header:=xlyes next next end sub ご相談で一番肝心の内容が提示されていません。 >複数シートに複数グループがあります。各シートの各グループの件数は不一致です グループ毎にB列C列を基準として並べ替えたい,というマクロは既に出来ている通りです。 ご相談の核心は,「それぞれのグループが一体どこから始まってどこまでで終わるのか,あなたのエクセル上の姿を見てどのように識別できるようになっている事実があるのか」を明確にして,それに基づいて範囲を取得するマクロを考えます。 あなたご説明: >Aグループ、愛知から秋田を範囲選択しソート、 >次にB、石川から愛媛を範囲選択しソート、 これではまるでいつも「Aグループは愛知と青森と秋田の3行の範囲だ」と言ってるようですが,グループの行数は不定なのでそれでは誤りであることも示されています。 すると一体,どこがAの始まりでどこがAの終わりだと,また次のBはどこから始まってどこで終わると目で見て判る表の作りになってるのでしょうか。ということです。 あなたが事例に出した都道府県名がグループ分けの重要な要素になっているのなら,それならそれでも構いませんから,事実としてどこからどこまでを1つのグループにしているのか,詳しく説明を書いてご相談を投稿してみてください。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
データのあるシートを分けたり、1つのシートの上下に配置したりしたら、質問のようになる(不便が発生する)。 これを崩せないなら、正面から向き合うほかない。 マクロの記録(VBA)を使っているなら、その点では自動化されているようだ。 ーー 何が希望か?何に困って居るか質問に明示していますか。推測で下記か。回答者に推測させないこと。 >をなるべく簡単に シートが複数枚あり(シート数X)、1シートにMAXy部分(グループ)有り、X*Y回の操作が大変と言うことか。 ソートはマクロの記録が出来たが、その複数回のくり返しが、VBAでコードを作れないのか。 そもそも質問にVBAの質問とも書いてないのでは。 エクセルは、操作・関数・VBA・特別ソフトしかないのは知っているよね。 関数では簡単でないのは判るよね。だからVBAしかないのでは。それなら質問でVBAで、とはっきり書くべき。 ーーー データの一本化(1シートに)を目指したほうが、今後のデータ分析などでやりやすいのではと思う。 ーーー VBAでは全シート対象の処理のくり返しは 標準モジュールに、たったこれだけのコードを入れて実験的にやってみれば、様子が納得できるだろう。 (1) Sub test01() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name MsgBox sh.Range("a1") Next End Sub ーー 各シートで処理をしている場合に、グループの区切りは、どの列や行でどういうものが考えられるのかな。 これによって、区切りの捕捉が不安定にもなる。 これを質問に書いてないということは、プログラムの経験が極く少ないと言うことで、自力でやれるレベルではないということでは無いかな。 標準モジュールに (2) Sub test02() Dim sh As Worksheet Set sh = Worksheets("Sheet1") d = sh.Range("A65536").End(xlUp).Row MsgBox d fst = "y" '第1回目スキップ用フラグ m = 2 For i = 1 To d p = InStr(Range("B" & i), "グループ") If p <> 0 Then If fst = "y" Then '1回目は処理しない fst = "n" Else '行範囲表示 MsgBox m + 1 & "-" & i - 1 End If m = i End If Next i '最終グループの行範囲表示 MsgBox m + 1 & "-" & i - 1 End Sub を貼り付けて実行で様子を見てください。 グループの文字の捕捉には、初歩的なロジックで、総なめして探していて、格好は悪いが、むずかしいことは避けた。 ーー 最終的に完成形は (1)のくり返しの中に(2)を入れ子構造にする。 Sh(シートオブジェクト)が両者を結ぶものになる。 MsgBox m + 1 & "-" & i - 1 のところのm+1とi-1をソート範囲に使う.。
お礼
imogasi 様 ありがとうございました。 質問の仕方が悪くて御迷惑をおかけしました。 御回答は大変参考になりました。 あらためて質問させていただきます。
- Wendy02
- ベストアンサー率57% (3570/6232)
>B列以降にデータがあり、 ということで、sh.Range("B:IV") B列以降を指定してます。 また、データは、フリガナが埋め込まれたものとして扱われています。(SortMethod:=xlPinYin) また、タイトル行として、Aグループ等が書かれているものとしています。(Header:=xlYes) 列の中のグループ毎に並べ替えています。(In r.Columns) '//標準モジュール Sub TestSort() Dim rng1 As Range Dim rng2 As Range Dim r As Range Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets Set rng1 = Intersect(sh.Range("B:IV"), sh.UsedRange) For Each r In rng1.Columns Application.ScreenUpdating = False For Each rng2 In r.Columns If Application.CountA(rng2) > 2 Then SortSubPro rng2 End If Next rng2 Next r Application.ScreenUpdating = True Next sh Set rng1 = Nothing: Set rng2 = Nothing: Set sh = Nothing Beep End Sub Function SortSubPro(rng As Range) Dim rng1 As Range Dim a As Range On Error Resume Next Set rng1 = rng.SpecialCells(xlCellTypeConstants, 23) On Error GoTo 0 If Not rng1 Is Nothing Then With rng1 For Each a In rng1.Areas If a.Count > 1 Then a.Resize(, 1).Sort Key1:=a.Range("A1"), _ Order1:=xlAscending, Header:=xlYes, SortMethod:=xlPinYin End If Next a End With End If End Function
お礼
Wendy02 様 ありがとうございました。 質問の仕方が悪くて御迷惑をおかけしました。 御回答は大変参考になりました。 あらためて質問させていただきます。
- MackyNo1
- ベストアンサー率53% (1521/2850)
B列以下の並べ替えの意味がよくわからないところがありますが、1列の県名データをAグループ、Bグループ、Cグループの順にそれぞれ並べ替えたいということでしょうか? その場合は、どこかのセルに並べ替え順にすべての県名を並べ替えたデータを作成しておき、Alt+T、Oのショートカット操作から「ユーザー設定リストの編集」で上記のセル範囲を「インポート」しておきます。 並べ替えを行うとき「データ」「並べ替え」で「順序」(Excel2003以前なら「オプション」をクリック)を「ユーザー設定リスト」にしてください。
お礼
MackyNo1 様 ありがとうございました。 質問の仕方が悪くて御迷惑をおかけしました。 御回答は大変参考になりました。 あらためて質問させていただきます。
- layy
- ベストアンサー率23% (292/1222)
都道府県に対して、並び基準の県コードや県フリガナ、グループ等を決めて並びキーに追加してやるのはどうか。 それか、 とあるシートで47都道府県全体並べ替えてから、県やグループに振り分けるのはできるかどうか。県を跨がることなければこれでも結果同じでは?。 範囲指定でなく特定の愛知県愛媛県秋田県だけ抽出し他のシートへ転記 工夫したいなら 何があれば?ー、どんな状態が?ー、うれしいか考える。仕掛けはそれから。
お礼
layy 様 ありがとうございました。 質問の仕方が悪くて御迷惑をおかけしました。 御回答は大変参考になりました。 あらためて質問させていただきます。
お礼
keithin 様 ありがとうございました。 質問の仕方が悪くて御迷惑をおかけしました。 御回答は大変参考になりました。 あらためて質問させていただきます。