• ベストアンサー

昇順に並び替え をマクロでやりたい

『昇順に並び替え』をエクセルで、且つマクロでやりたいです。 ただ、『まずA列を並び替えて、次にB列を並び替えて・・・』というように次々移るヤツは可能でしょうか。 厳密にはA列に社員番号・B列に氏名、C列に違う部署の人の社員番号・D列に氏名 なのですが・・・。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >A列に社員番号・B列に氏名、C列に違う部署の人の社員番号・D列に氏名  話が良く見えませんが、2列ずつ並べ替えるという意味に読み取れました。 本当は、一度、自分の手でやってみて、それで、どうするか手立てを考えてからマクロを考えるべきで、説明が曖昧で、「さあマクロを作ってください」と言っても、なかなか思ったようにはなりません。 '-------------------------------------------------- Sub TestSortMacro() Dim rng As Range Dim i As Long '注意:必ずずタイトル行は入れること Set rng = ActiveSheet.Range("A1").CurrentRegion If rng.Columns.Count Mod 2 <> 0 Then MsgBox "偶数列ではありません。": Exit Sub Application.ScreenUpdating = False For i = 0 To rng.Columns.Count - 1 Step 2  With rng.Offset(, i).Resize(, 2)  .Sort Key1:=.Cells(2, 1), _     Order1:=xlAscending, _     Header:=xlYes, _     OrderCustom:=1, _     MatchCase:=False, _     Orientation:=xlTopToBottom, _     SortMethod:=xlPinYin  End With Next i Set rng = Nothing Application.ScreenUpdating = True End Sub

nananona_2006
質問者

お礼

有難うございました。 上手く行きました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>、『まずA列を並び替えて、次にB列を並び替えて・・・』というように次々移るヤツは可能でしょうか この意味が不明です。特に「次々移るヤツは」が判らない。 ソートキーは何列あるのですかA-Dの4列ですか。一般的には1度には3列までなので、4列あるので、といった質問ですか。 一般にソートはマクロの記録をとって少々変えれば済むように思いますが。何が疑問点なのか。

  • asobe
  • ベストアンサー率76% (10/13)
回答No.1

少し回りくどいですが、以下の感じでどうですか? Dim lngTopRow As Long Dim intColLoop As Integer Dim intStartCol As Integer Dim intEndCol As Integer Dim intSelectRange As Integer lngTopRow = 2 'データの先頭行 intStartCol = 1 '開始列(A = 1) intEndCol = 3 '終了列(C = 3)・・・最後の選択範囲はC列~D列なのでCを終了列とする intSelectRange = 2 '今回、選択範囲はA~B、C~Dの2列ずつなので = 2 For intColLoop = intStartCol To intEndCol Step intSelectRange '選択範囲の先頭行を選択 Range(Cells(lngTopRow, intColLoop), Cells(lngTopRow, intColLoop + intSelectRange - 1)).Select '選択範囲の最終行まで選択 Range(Selection, Selection.End(xlDown)).Select 'ソート(優先キー:先頭列、第2優先キー:次の列) Selection.Sort Key1:=Range(Cells(lngTopRow, intColLoop), Cells(lngTopRow, intColLoop)), _ Order1:=xlAscending, _ Key2:=Range(Cells(lngTopRow, intColLoop + intSelectRange - 1), Cells(lngTopRow, intColLoop + intSelectRange - 1)), _ Order2:=xlAscending, _ Header:=xlGuess, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal Next intColLoop

関連するQ&A