ID非公開さん
2022/1/11 13:04
1回答
VBA】自動のマクロでのソートについて A B C 1 書類番号 コード 名 前 2 123-456 A-123 あいう 3 A-421 かきく
VBA】自動のマクロでのソートについて A B C 1 書類番号 コード 名 前 2 123-456 A-123 あいう 3 A-421 かきく 4 B-324 さしす 5 456-789 A-215 たちつ 6 ・ ・ ・ 7 ・ ・ ・ 8 ・ ・ ・ 上記のような表があります。 書類番号をA列に入力していて、同じ書類は省略して空白にしています。 (上表だと2~4行目は同じ書類なので、A3とA4は空白) BのコードとCの名前を別のブックからコピペしたときに、自動でBのコードをキーにして昇順にソートしたいと思い下記のコードを組みました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long r = Range("B" & Rows.Count).End(xlUp).Row If Not Intersect(Target, Range("C" & r)) Is Nothing Then Range("B1:C" & r).Sort Columns("B"), xlAscending, Header:=xlYes End If これで昇順にソートはできたのですがBC列全部が対象になってしまいます。 これを書類番号ごとにソートしたいのです。 123-456という書類番号の中だけで昇順にソート、456-789という書類番号の中だけでソート、というのは可能でしょうか? よろしくお願いいたします。
表が見づらいですね、、すみません。 不明点ありましたらおっしゃってください。
Visual Basic | Excel・127閲覧・50
ベストアンサー
こういう事なんですかね? ソート開始行とソート終了行を取得して、それを繰り返します。 ※ソートはB列で行っています。C列はただの確認用。 Sub Sample() Dim i As Long Dim fnd As Range, buf As Range, r As Range Application.ScreenUpdating = False Set r = Cells(Rows.Count, "B").End(xlUp) For i = 2 To r.Row Set buf = Cells(i, "A") Set fnd = Range(buf.Offset(1), r.Offset(, -1)).Find("*") If fnd Is Nothing Then Set fnd = r.Offset(1, -1) Range(buf, fnd.Offset(-1)).Offset(, 1).Resize(, 2).Sort Key1:=buf.Offset(, 1), Order1:=xlAscending, Header:=xlNo If fnd.Row = r Then Exit Sub Else i = fnd.Row - 1 Next i End Sub
If fnd.Row = r Then Exit Sub Else i = fnd.Row - 1 ↓ i = fnd.Row - 1 どっちでも動作しますが、余計な記述だったので修正…。
質問者からのお礼コメント
大変ありがとうございました。 無事に処理ができました。助かりました。
お礼日時:1/11 15:47