• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでのデータの並べ替え)

エクセルでデータの並べ替え方法

このQ&Aのポイント
  • エクセルで表のデータをグループごとに並べ替える方法を教えてください。
  • エクセルの操作で「同じサイズの結合セルが必要です」というエラーが出る場合の対処法を教えてください。
  • エクセルで複数行のデータを一つのまとまりとして扱い、並べ替える方法を教えてください。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 並び替え・集計等々はセルの結合があると厄介ですね! 一番良いのはセル結合がない表を作り替えるコトなのですが、 すでに表が作成済みだとすると 一旦結合を解除 → 空白セルにもデータを入力 → 並び替え → セルの再結合 といった処理が必要になると思います。 これを手作業で!となると大変ですので、VBAでやってみました。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストし、Excel画面に戻ってマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 並び替え() 'この行から Dim i As Long Application.ScreenUpdating = False 'セルの分割 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 2 With Cells(i, 1) .UnMerge .Offset(, 1).UnMerge .Offset(1) = Cells(i, 1) .Offset(1, 1) = Cells(i, 2) End With Next i Cells(1, 1).CurrentRegion.Sort key1:=Cells(1, 1), order1:=xlAscending, Header:=xlYes _ , key2:=Cells(1, 2), order2:=xlAscending, Header:=xlYes 'セルの再結合 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row - 1 Step 2 Application.DisplayAlerts = False With Cells(i, 1) .Resize(2, 1).Merge .Offset(, 1).Resize(2, 1).Merge End With Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 質問通りに1行目がタイトル行でデータは2行目以降にあり、A・B列は2行ずつ結合されているとします。 こんな感じではどうでしょうか?m(_ _)m

kumachandayo
質問者

お礼

すごいすごい、あっという間にグループごとに並び変わりました!!すごすぎる。 わざわざコードまで書いていただいて、時間がかかっただろうにほんとにありがたいです。 とても助かりました!! ありがとうございました!

その他の回答 (3)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

基本的に一部に結合セルが混ざっている表をそのまま並べ替えることはできません。 例示の結合セルのデータなら以下のような操作で並べ替えを行うのが簡単かもしれません。 B2セル以下の結合されたデータ範囲を選択し、右クリックで右方向にオートフィルして「書式のみコピー」を選択します(通常のオートフィル操作を行い、右下に表示されるオートフルのオプションマーカーから選択してもよい)。 この状態で並べ替えを行い、最後にC列のデータ範囲を選択して右クリック「セルの書式設定」の配置タブで「セルを結合する」のチェックを外し元の表の状態に戻します。

kumachandayo
質問者

お礼

ご丁寧な説明ありがとうございました。 ただ、私が書かなかったのが悪いのですが、入力用と表示用は分けずにやりたいです。 でも、今後の参考とさせていただきます。 ありがとうございます。

kumachandayo
質問者

補足

すみません、タイミングが悪く、下の方へのお礼を入力しているときに、MackyNo1が書き込んでくれたようで、気づかずに間違えて書き込んでしまいました。 すっとんきょうなお礼文、すみませんでした。 MackyNo1が教えてくれた方法も試してみます。ほんとにみなさん、知識が豊富ですごいです。 回答、参考にさせていただきます。 ご丁寧にありがとうございました。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

上の入力用の表を並べ替えた結果です。 ついでに条件付書式も設定してみました。

kumachandayo
質問者

お礼

ご丁寧な説明ありがとうございました。 ただ、私が書かなかったのが悪いのですが、入力用と表示用は分けずにやりたいです。 でも、今後の参考とさせていただきます。 ありがとうございます。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

結合したセルを含む範囲を並べ替えたいと思ったら、一般機能だけで考えると 結合をすべて解除するか、全て同じ大きさに結合するかしかなさそうです。 ですので、次善の策としてお納めください。 とりあえず、図をご覧ください(見づらいかもしれませんが)。 便宜上(主にスクリーンショットを作るのが面倒だったので)1シートにしていますが、 実際は「入力用のシート」「表示・印刷用のシート」に分けて運用するイメージです。 上半分が入力用の表です。 > C列にはほかにも書きたいデータがあってここは2行必要 とのことですが、とりあえず表を横に伸ばす感覚で蓄積していきます。 つまり、A列にグループ、B列に名前、C列以降にその他データを入力します。 (例として、C列:学年・D列:誕生日・E列:その他情報 の3列で作っています。) 下半分に表示・印刷用の表を作りました。 単純に ・A列にグループ:=A2 ・B列に名前:=B2 ・C列に備考:=C2&CHAR(10)&D2&IF(E2<>"",CHAR(10)&E2,"") としていますが、このC列が肝です。 入力用表の「学年・誕生日・その他」を結合し、1セルにまとめるための式です。 CHAR関数に関しては別途お調べいただきたいのですが、 要するにCHAR(10)でセル内改行が出来る、と盲目的に覚えるのも可です。 式中のIF以降は、E列が空白じゃなかったら改行してE列を結合、の意味で、 E列が空白じゃなかったら3行目を追加、E列が空白だったら2行で終わります。 F列以降が出来そうでも、&IF以降を増やすことで対応可能です。 これで行高を調整し、上下の文字位置を中央に持ってくると図のように見えます。 あとは、表示用のシートでグループごとに条件付き書式で色を付けると 質問文に添付くださったイメージに近づくものと思います。 肝心の並べ替えですが、 この場合は入力表を並べ替えると、連動して表示用の表も並び替わります。 入力表内にフォーカスを充て、データから並べ替え、「グループ」を昇順に設定、 レベルの追加をクリックして「なまえ」を昇順で追加してやれば、2項目での並べ替えが出来ます。 フィルタは入力用・表示用どちらでも可能です。 表を作り替えるのは手間かもしれませんので、 こんな考え方もあるよ程度の参考までに。

kumachandayo
質問者

お礼

ご丁寧な説明ありがとうございました。 ただ、私が書かなかったのが悪いのですが、入力用と表示用は分けずにやりたいです。 でも、今後の参考とさせていただきます。 ありがとうございました。

関連するQ&A

専門家に質問してみよう