- ベストアンサー
エクセルVBAで繰り返し操作する方法
- エクセルVBAを使用して、指定したデータを並び替える方法について教えてください。
- 現在、1行のデータを並び替えるVBAコードを作成しましたが、3行や4行といった複数の行を並び替える方法がわかりません。
- どなたか、VBAの繰り返し処理を使って複数行のデータを並び替える方法を教えていただけないでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
各行A:D列対象なら For i = 1 to 50 Range("A" & i & ":D" & i).select Application.CutCopyMode = False Selection.Sort Key1:=Range("A" & i), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Next i
その他の回答 (3)
- hananoppo
- ベストアンサー率46% (109/235)
こんな感じでいかがでしょう。 Sub Sample() Dim rNum As Long rNum = 1 Do Until Cells(rNum, 1).Value & Cells(rNum, 2).Value _ & Cells(rNum, 3).Value & Cells(rNum, 4).Value = "" Range("A" & rNum & ":D" & rNum).Sort Key1:=Cells(rNum, 1), Orientation:=xlLeftToRight rNum = rNum + 1 Loop End Sub
お礼
VBA初心者ですみません。 ちと、難しいです。
- Wendy02
- ベストアンサー率57% (3570/6232)
人と同じコードを書いてもしょうがないので、違うコードを書きました。 特に、問題はないと思いますが、最後の行を検出するために、End プロパティですと、心もとないです。一行ずつするなら、あまり、Sort メソッドは必要ないような気もします。 列は、可変ですから、D列、E列でも、それ以上でも可能です。なるべく標準モジュールに登録してお使いください。 Sub Test1() Dim rng As Range Dim LstRow As Long, LstCol As Long Dim i As Long, j As Long Dim ar As Variant Set rng = Range("A1").CurrentRegion With rng LstRow = .Cells(.Cells.Count).Row LstCol = .Cells(.Cells.Count).Column ReDim arx(1 To LstCol) End With For i = 1 To LstCol arx(i) = i Next With Application .ScreenUpdating = False For i = 1 To LstRow ar = .Transpose(Range(Cells(i, 1), Cells(i, Columns.Count).End(xlToLeft))) 'ar = .Transpose(Range(Cells(i, 1), Cells(i, LstCol + 1).End(xlToLeft))) '※ ar = .Transpose(ar) ar = .Small(ar, arx) j = .Count(ar) Cells(i, 1).Resize(, LstCol).ClearContents Cells(i, 1).Resize(, j).Value = ar Next i .ScreenUpdating = True End With End Sub もし、右側にデータがある場合は、※と。その上の行と交換してください。
お礼
VBA初心者のため、 なかなか、理解はできません。 これから、がんばります。 ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
たとえば dim n Application.CutCopyMode = False for n = 0 to range("A65536").end(xlup).row - 1 Range("A1:D1").offset(n).Sort _ Key1:=Range("A1").offset(n), _ Order1:=xlAscending, _ Header:=xlno, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlLeftToRight, _ SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal next n みたいなカンジで。 for to nextとfor nextは繰り返しの基本中の基本ですから,参考書(や,もし良いのが見つかればネット)でしっかりマスターしてください。 offsetを使う他に,headerの所も変えているで見落とさないようにしてください。
お礼
基本中の基本を質問して、 ごめんなさい。 たいへんべんきょうになりました。 これから、頑張ります。 ありがとうございました。
お礼
VBA初心者なので、 とてもシンプルで使いやすかったです。 ありがとうございました。