プロが教える店舗&オフィスのセキュリティ対策術

Excelの並べ替えです。

5 10 2 3
2 9 3 4
4 1 5 6
1 8 6 7

と4列にならんでいるセルを昇順に並べ替えたい
第1順位は一番左の列、第2順位はその右となりの列とします。
タイトル行があるので元データは2行目からです。
これをマクロで設定するにはどうしたらよいですか?

質問者からの補足コメント

  • わかりずらくてすいません。
    再度質問しなおしますと
    1 4 5 6      13510   
    3 6 7 8      1 4 5 6
    1 3 510  ⇒   2 3 4 9
    2 3 4 9      3 6 78
    と並び変えたいのです。
    よろしくお願いいたします。

      補足日時:2020/01/27 07:49

A 回答 (8件)

2 3 510


 2 3 4 9
 1 4 5 6
 1 6 7 8
にするという事ですか?
    • good
    • 0

おはようございます。


方法は、いくつかありますが、Small関数を使い昇順に、、

Small関数で小さい順に配列に入れてます。
配列の値をセル範囲に書き出します。

サンプルのセル範囲はご質問の4×4の範囲(A2:D5)です。
汎用性は劣りますが、参考になれば、、


Sub Sample()
 Dim i As Long, j As Long
 Dim TmpArr(3, 3) As Variant
   For i = 0 To 3
     For j = 0 To 3
      TmpArr(i, j) = WorksheetFunction.Small(Range(Cells(i + 2, 1), Cells(i + 2, 4)), j + 1)
     Next
   Next
  Range(Cells(2, 1), Cells(5, 4)) = TmpArr()
End Sub

配列の3は、0から始まる為です。
    • good
    • 1

No2の人のやり方が正解ですが…



でもマクロって組んだらあとずっとメンテナスをしなければなりません。
たとえば1列増えたり減ったりするだけでプログラムを修正する必要があります。

プログラムって属人的になりがちなのですよ。
部局が異動しても、修正する必要がでてくれば、当然のように要求されます。
「貴方がつくったのだから、貴方が修正するのが当然」という人もいるんですよ。
ひどいときには退職したあとに連絡がきたことがあります。

ですので、プログラムをつくるにしても、開発タブのマクロ記録でされる方がよいかと思うのですが。
    • good
    • 0

もっとシンプルに以下はいかがですか?



Sub Sample() 
 Range("A1:D4").Sort _
  Key1:=Range("D1"), Order1:=xlAscending, _
  Key2:=Range("C1"), Order2:=xlAscending, _
  Key3:=Range("B1"), Order3:=xlAscending, _
  Header:=xlNo
 Range("A1:D4").Sort _
  Key1:=Range("A1")
End Sub
    • good
    • 0

No.4 の補足



2回目のソート処理で「Order1:=xlAscending」と「Header:=xlNo」は前回の物を引き継ぐので省略しています。
    • good
    • 0

こんにちは!



横からお邪魔します。
単純に手作業で出来そうですが、VBAでの方法をご希望だというコトなので
一例です。

元データはA~D列にあり、1行目の項目は入力済みだとします。

並び替えのキーはA・B列の二つだけで良いのですね。

Sub Sample1()
 Range("A:D").Sort key1:=Range("A1"), order1:=xlAscending, _
  key2:=Range("B1"), order1:=xlAscending, Header:=xlYes
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0

No.4 の訂正です


「タイトル行があるので元データは2行目からです。」を見逃していました。申し訳ございません。

Sub Sample() 
 Range("A1:D5").Sort _
  Key1:=Range("D1"), Order1:=xlAscending, _
  Key2:=Range("C1"), Order2:=xlAscending, _
  Key3:=Range("B1"), Order3:=xlAscending, _
  Header:=xlYes
 Range("A1:D5").Sort _
  Key1:=Range("A1")
End Sub
    • good
    • 0

No.4 No.7 の訂正



なんととんでもない実験用のコードを載せていたことに気づきました。本当に申し訳ございません。
判っているとは思いますが以下が正解です。

Sub Sample() 
 Range("A1:D5").Sort _
  Key1:=Range("B2"), Order1:=xlAscending, _
  Key2:=Range("C2"), Order2:=xlAscending, _
  Key3:=Range("D2"), Order3:=xlAscending, _
  Header:=xlYes
 Range("A1:D5").Sort _
  Key1:=Range("A1")
End Sub
    • good
    • 0

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