『繰返し同じ処理をしたい』(福寿)
B列で重複した値がある行を削除する下記コードですと、4回ほど実行しないとB列の重複が無くならないのですが繰り返し処理をするためにはどのように変更したらよいか教えてください。
Sub Test()
'データの最終行を取得 Dim maxRow As Long maxRow = Cells(Rows.Count, 1).End(xlUp).Row
'データ行数分 重複削除 Dim i As Long For i = 3 To maxRow '上の行と比較して、重複している場合のみ削除 If Cells(i - 1, 2) = Cells(i, 2) Then Rows(i).Delete End If Next i End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
(参考りんく) 2024/07/30(火) 13:30:39
Sub test()
'データの最終行を取得 Dim maxRow As Long maxRow = Cells(Rows.Count, 1).End(xlUp).Row 'データ行数分 重複削除 Dim i As Long For i = 3 To maxRow '重複確認を繰り返す Do 'もし、上と同じ値なら If Cells(i - 1, 2).Value = Cells(i, 2).Value Then 'その時は行を削除 Rows(i).Delete Else 'そうでなければ、ループを抜ける Exit Do End If Loop Next i End Sub
ただし、行の削除をするときは、下から見ていくのが定石
Sub test002()
Dim i As Long
For i = Cells(Rows.Count).End(xlUp).Row To 3 Step -1 With Cells(i, 2) If .Value = .Offset(-1).Value Then '行全体を削除 .EntireRow.Delete End If End With Next End Sub
ちなみに、エクセルは重複削除の機能があるけど、使えないのかな?
(使えるならマクロを使わないか。。。^^;)
Sub Macro1()
Range("A1").CurrentRegion.RemoveDuplicates Columns:=2, Header:=xlYes End Sub
他にも別案あるけど、もう、おなか一杯ですよね^^;
(まっつわん) 2024/07/30(火) 14:51:25
あくまで参考として 行を削除すると下の行がどんどん繰り上がってくるので、 ・ループの終了条件が変わることへの対応 ・比較する行がどことどこなのかを考える が必要になります。
Sub sample() i = 3 Do While i < Cells(Rows.Count, 2).End(xlUp).Row - 1 ' 最終行は毎回更新されるので、最新の最終行と比較 (For Nextは最終値が更新されない) j = i + 1 Do While Cells(i, 2).Value = Cells(j, 2).Value ' 削除すると行が繰り上がってくるので、比較対象は常に1行下 Rows(j).Delete Loop i = i + 1 Loop End Sub
定石どおり、下から削除していくのがかんたんですね (´・ω・`) 2024/07/30(火) 15:09:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.