• ベストアンサー

エクセルで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 このようにしたいです。 よろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

arabu
質問者

お礼

解答いただいた方ありがとうございます。

その他の回答 (6)

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.6

No4です。 E1に=A1、E2に=A1、をそれぞれ入力し、E1およびE2を選択してフィルハンドルをE6までドラッグします。さらに横にH6までドラッグします。コピー&値ペーストをします(安全のため)。アクティブ領域(A1:H6)を選択してH降順、E昇順でソートし、EからHを削除します。 ステップは多くなりますが、元のデータを変更しないで済みます。 (あわてて取り繕ったぼろ隠しのような答えで少々気恥ずかしい気もしますが、何かのご参考に)。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

データ→並び替え→第1優先をC列→第2優先をB列で如何でしょうか。

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.4

No2です。 もう一度質問文を読み直しましたら完全に外していました。 無視してください。申し訳ありませんでした。 正しい妙案が浮かんだら書き込みます。

noname#204879
noname#204879
回答No.3

その程度のことなら、「一気」でなく“二気”で可能かと、 1.当該2行を選択して、右クリックから[切り取り] 2.1行目を選択して、右クリックから[切り取ったセ   ルの挿入]

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.2

A1からD6までご質問のデータが入っているとすると、データ>並べ替えで3つまで指定できるのでD列、C列、B列の順でソーティングを設定すればよいように感じられますが、結果として示されている2行目がどのようなコンセプトでその位置に来ているのかわかりません。それを除けば上記のとおりの方法でソーティングできるはずです(おまけ:並べ替えの要素が4以上になる場合には連番を使い、複数段階のソーティングを行います)。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

例で示したものはどちらかというと表形式的なものです。ですのでその状態で見るしかないもの。データベース的な処理をしたいのなら、どうにかして修正するしかないでしょう。 こんな感じで。 10 A  G   11 B  H 20 C  I  ○ 21 D  J  ○ 30 E  K 31 F  L 修正は量が多いのならマクロを組んでやってしまえば手っ取り早いでしょう。それが難しいのなら最初から入力しなおした方が後々のためにもお勧めかもしれません。

関連するQ&A