- ベストアンサー
エクセルで2列以上のものを同時に並び替えするには
エクセルで下記のようなデーターがあるとします。 1 A G B H 2 C I ○ D J 3 E K F L このようにひとつの項目に2行づつあるものに対して、最後に○をつけたものを先頭に2行そのまま一気に並び替えるにはどのようにすればよろしいでしょうか?要するに 2 C I ○ D J 1 A G B H 3 E K F L このようにしたいです。 よろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 一応、現在は、2列ごとの並べ替えをするものですが、AA1から右をテンポリーセルとしていますから、もし、そこに何かあるようでしたら、どこか適当な場所にしてください。 '標準モジュール推奨 Sub DoubleRowsSort() '二行を1行として並べ替えをするマクロ Dim rng As Range Dim mRow As Integer Dim mCol As Integer Dim Ar() As Variant Dim Ar2() As Variant Dim c As Variant Dim r As Variant Dim i As Integer Dim k As Integer Set rng = Range("A1").CurrentRegion mRow = rng.Rows.Count mCol = rng.Columns.Count ReDim Ar(1 To mRow / 2, 1 To mCol * 2) For Each c In Range("A1").CurrentRegion i = i + 1 Ar(Int((i - 1) / (mCol * 2)) + 1, (i - 1) Mod mCol * 2 + 1) = c.Value Next c Application.ScreenUpdating = False 'テンポラリセル領域 With Range("AA1").Resize(mRow / 2, mCol * 2) .Value = Ar() '並べ替え 4列目(D) .Sort Key1:=.Range("D1"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom ReDim Ar2(1 To mRow, 1 To mCol) For Each r In .Cells k = k + 1 Ar2(Int((k - 1) / mCol) + 1, (k - 1) Mod mCol + 1) = r.Value Next .ClearContents End With Application.ScreenUpdating = True rng.Value = Ar2() Set rng = Nothing End Sub
その他の回答 (6)
- cockerel
- ベストアンサー率46% (253/548)
No4です。 E1に=A1、E2に=A1、をそれぞれ入力し、E1およびE2を選択してフィルハンドルをE6までドラッグします。さらに横にH6までドラッグします。コピー&値ペーストをします(安全のため)。アクティブ領域(A1:H6)を選択してH降順、E昇順でソートし、EからHを削除します。 ステップは多くなりますが、元のデータを変更しないで済みます。 (あわてて取り繕ったぼろ隠しのような答えで少々気恥ずかしい気もしますが、何かのご参考に)。
- mu2011
- ベストアンサー率38% (1910/4994)
データ→並び替え→第1優先をC列→第2優先をB列で如何でしょうか。
- cockerel
- ベストアンサー率46% (253/548)
No2です。 もう一度質問文を読み直しましたら完全に外していました。 無視してください。申し訳ありませんでした。 正しい妙案が浮かんだら書き込みます。
その程度のことなら、「一気」でなく“二気”で可能かと、 1.当該2行を選択して、右クリックから[切り取り] 2.1行目を選択して、右クリックから[切り取ったセ ルの挿入]
- cockerel
- ベストアンサー率46% (253/548)
A1からD6までご質問のデータが入っているとすると、データ>並べ替えで3つまで指定できるのでD列、C列、B列の順でソーティングを設定すればよいように感じられますが、結果として示されている2行目がどのようなコンセプトでその位置に来ているのかわかりません。それを除けば上記のとおりの方法でソーティングできるはずです(おまけ:並べ替えの要素が4以上になる場合には連番を使い、複数段階のソーティングを行います)。
- popesyu
- ベストアンサー率36% (1782/4883)
例で示したものはどちらかというと表形式的なものです。ですのでその状態で見るしかないもの。データベース的な処理をしたいのなら、どうにかして修正するしかないでしょう。 こんな感じで。 10 A G 11 B H 20 C I ○ 21 D J ○ 30 E K 31 F L 修正は量が多いのならマクロを組んでやってしまえば手っ取り早いでしょう。それが難しいのなら最初から入力しなおした方が後々のためにもお勧めかもしれません。
お礼
解答いただいた方ありがとうございます。