性格いい人が優勝

くわしい方、教えていただけないでしょうか?
ネットで検索しましたが、解決するような記事が見つかりませんでした。

添付画像のような表を作成しております(実際はもっと下にたくさん入力が続いてます)。

やりたいことは、この表にどんどんデータを入力していったときに、
グループバラバラなので、データの並べ替えでグループ名ごとにひとかたまりにして並べ替えたいのです(降順でも昇順でも、どちらでもいいです。でもできれば、グループ内で、氏名があいうえお順とかになるとすごく嬉しいです・・・・)

ですが、今の状態で並べ替えようとすると、「この操作には、同じサイズの結合セルが必要です」とエラーが出ます。

エクセルにあまり詳しくないですが、おそらくこれは、一人分のデータがA列とB列は1行ずつなのにC列で2行あるからだと思っているのですが、どうしても、C列は2行必要なので(誕生日のデータだけなら、D列に書けばいいのですが、C列にはほかにも書きたいデータがあってここは2行必要なんです)


この場合、どのようにしたら、うまく並べ替え(2行をひとかたまりと認識して)できるのでしょうか?

どなたかご教授してくださると嬉しいです。

「エクセルでのデータの並べ替え」の質問画像

A 回答 (4件)

こんばんは!



並び替え・集計等々はセルの結合があると厄介ですね!

一番良いのはセル結合がない表を作り替えるコトなのですが、
すでに表が作成済みだとすると

一旦結合を解除 → 空白セルにもデータを入力 → 並び替え → セルの再結合
といった処理が必要になると思います。

これを手作業で!となると大変ですので、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
    • good
    • 2
この回答へのお礼

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

お礼日時:2013/01/29 22:18

基本的に一部に結合セルが混ざっている表をそのまま並べ替えることはできません。


例示の結合セルのデータなら以下のような操作で並べ替えを行うのが簡単かもしれません。

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

この回答への補足

すみません、タイミングが悪く、下の方へのお礼を入力しているときに、MackyNo1が書き込んでくれたようで、気づかずに間違えて書き込んでしまいました。
すっとんきょうなお礼文、すみませんでした。

MackyNo1が教えてくれた方法も試してみます。ほんとにみなさん、知識が豊富ですごいです。
回答、参考にさせていただきます。
ご丁寧にありがとうございました。

補足日時:2013/01/29 22:24
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/01/29 22:20

上の入力用の表を並べ替えた結果です。




ついでに条件付書式も設定してみました。
「エクセルでのデータの並べ替え」の回答画像3
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/01/29 22:21

結合したセルを含む範囲を並べ替えたいと思ったら、一般機能だけで考えると


結合をすべて解除するか、全て同じ大きさに結合するかしかなさそうです。



ですので、次善の策としてお納めください。
とりあえず、図をご覧ください(見づらいかもしれませんが)。

便宜上(主にスクリーンショットを作るのが面倒だったので)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項目での並べ替えが出来ます。
フィルタは入力用・表示用どちらでも可能です。




表を作り替えるのは手間かもしれませんので、
こんな考え方もあるよ程度の参考までに。
「エクセルでのデータの並べ替え」の回答画像2
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/01/29 22:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!