- ベストアンサー
昇順に並び替え をマクロでやりたい
『昇順に並び替え』をエクセルで、且つマクロでやりたいです。 ただ、『まずA列を並び替えて、次にB列を並び替えて・・・』というように次々移るヤツは可能でしょうか。 厳密にはA列に社員番号・B列に氏名、C列に違う部署の人の社員番号・D列に氏名 なのですが・・・。
- みんなの回答 (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
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
>、『まずA列を並び替えて、次にB列を並び替えて・・・』というように次々移るヤツは可能でしょうか この意味が不明です。特に「次々移るヤツは」が判らない。 ソートキーは何列あるのですかA-Dの4列ですか。一般的には1度には3列までなので、4列あるので、といった質問ですか。 一般にソートはマクロの記録をとって少々変えれば済むように思いますが。何が疑問点なのか。
- asobe
- ベストアンサー率76% (10/13)
少し回りくどいですが、以下の感じでどうですか? 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
お礼
有難うございました。 上手く行きました。