• 締切済み

エクセル2002でのソートについて

A B C 1 A1 B1 C1 2 __ B2 C2 3 A5 B5 C5 4 __ B4 C4 5 A3 B3 C3 6 __ B6 C6    ↓ソート A B C 1 A1 B1 C1 2 __ B2 C2 3 A3 B3 C3 4 __ B4 C4 5 A5 B5 C5 6 __ B6 C6 (1)A列をキーに (2)1と2行,3と4行,5と6行を一纏めに ソートする方法はありますでしょうか?

みんなの回答

  • at121
  • ベストアンサー率41% (85/206)
回答No.3

マクロで データの単位の数行のブロック を1行に展開して (必要に応じてソートして) マクロで 1行に展開したブロックを数行に復元する。 マクロ 「選択範囲を基準に一行にまとめる」 は 使用前に 1ブロック 数行、数列 を選択する。 例 元データ 11a 11b 11c 12a 12b 12c 21a 21b 21c 22a 22b 22c A1 から C2 を選択 し 実行 11a 11b 11c %%%2 12a 12b 12c 21a 21b 21c %%%2 22a 22b 22c ブロック単位で 1行にする。     ↑%%%2 セパレータ "%%%" & 行 が 1行 の 中に残る ※列の入れ替えをすると復元できなくなる。 ※行のソートは ブロックに 影響しない マクロ 「一行を複数行に分割しブロックに復元」  は セパレーター"%%%" & 行 を基準に自動的に復元 'セパレーター"%%%"は自動的にクリア ↓標準モジュールに追加↓ Sub 選択範囲を基準に一行にまとめる() 'セパレーター"%%%" & 行 '実行前に データの単位の1ブロックを選択 Set 選択範囲 = Selection 選択範囲行数 = 選択範囲.Rows.Count 選択範囲列数 = 選択範囲.Columns.Count Do While Not IsEmpty(選択範囲.Cells(1, 1)) For 行 = 選択範囲行数 To 2 Step -1 Range(選択範囲.Cells(行, 1), 選択範囲.Cells(行, 選択範囲列数)).Cut _ Destination:=選択範囲.Cells(1, 1).Offset(0, (選択範囲列数 + 1) * (行 - 1)) 選択範囲.Cells(1, 1).Offset(0, (選択範囲列数 + 1) * (行 - 1) - 1) = "%%%" & 行 'セパレーター Next Set 選択範囲 = 選択範囲.Offset(選択範囲行数, 0) Loop End Sub Sub 一行を複数行に分割しブロックに復元() 'セパレーター"%%%" & 行 Do While Not Cells.Find("%%%2") Is Nothing 復元行位置 = Cells.Find("%%%2").Row 復元列数 = Cells.Find("%%%2").Column Do While Not Rows(復元行位置).Find("%%%*") Is Nothing Set 復元基点 = Rows(復元行位置).Find("%%%*") 復元行 = Int(Mid(復元基点.Value, 4)) - 1 復元基点.Clear 'セパレーター 削除 Rows(復元行位置 + 復元行).Insert Range(復元基点.Offset(0, 1), 復元基点.Offset(0, 復元列数 - 1)).Cut _ Destination:=Cells(復元行位置 + 復元行, 1) Loop Loop End Sub

  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.2

この例は、A列をキーにしたソート結果ではないですね。 タイプミスですか? この回答例でいくと、No.1さんのおっしゃるとおりです。 A列をキーに  1と2行,3と4行,5と6行を一纏め にしたいのであれば、  1と2行,3と4行,5と6行 のA列を同じにしないといけないと思います。 マクロを組めばできるのかも知れませんが、そちらは識者に任せます。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.1

何がしたいのかよくわかりませんが、 A列をキーにする必要があるのですか? B列やC列を基準に普通にソートすれば ご希望の結果ではないですか? B列やC列のデータをもう少し詳しく書いて下さい。 あとデータの入力時の状態もわかればもう少し 回答できるかもしれません。

関連するQ&A