人に聞けない痔の悩み、これでスッキリ >>

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行を一纏めに
ソートする方法はありますでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

マクロで データの単位の数行のブロック を1行に展開して


(必要に応じてソートして)
マクロで 1行に展開したブロックを数行に復元する。

マクロ 「選択範囲を基準に一行にまとめる」
は 使用前に 1ブロック 数行、数列 を選択する。

例 元データ
11a11b11c
12a12b12c
21a21b21c
22a22b22c

A1 から C2 を選択 し 実行

11a11b11c%%%212a12b12c

21a21b21c%%%222a22b22c

ブロック単位で 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
    • good
    • 0

この例は、A列をキーにしたソート結果ではないですね。


タイプミスですか?
この回答例でいくと、No.1さんのおっしゃるとおりです。

A列をキーに
 1と2行,3と4行,5と6行を一纏め
にしたいのであれば、
 1と2行,3と4行,5と6行
のA列を同じにしないといけないと思います。

マクロを組めばできるのかも知れませんが、そちらは識者に任せます。
    • good
    • 0

何がしたいのかよくわかりませんが、


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

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


人気Q&Aランキング