同じ行内で重複があれば削除し、空白を左詰めにする作業を行っています。
下記コードで動くのですが、左詰めにすごく時間がかかります。
他に方法はないでしょうか。
ちなみに、 (xlToLeft)しなければ動きは早いです。
F g1|Fg2 |Fg3 |Fg4
aaa|bbb|空白 |ccc
aaa|aaa|空白 |空白
ccc|空白 |ccc|bbb
aaa|ccc|bbb|ddd
Sub sample() Dim i As Long, j As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row For j = 4 To 1 Step -1 If WorksheetFunction.CountIf(Range(Cells(i, 1), Cells(i, 4)), Cells(i, j)) > 1 Or Cells(i, j) = "" Then Cells(i, j).Delete (xlToLeft) End If Next j Next i End Sub
とりあえず、思いついた案ですが、
1. 作業用シートへ行列入れ替えで貼り付け
2. RemoveDuplicatesメソッドで削除
3. 結果を書き戻す
RemoveDuplicatesを調べてみたのですが、重複削除するコードであっていますか?
同じ行内の列方向の重複削除まではできていて、削除したセル=空白を左詰めしたいのですが。
教えて頂いた内容が理解できず申し訳ございません。
RemoveDuplicatesメソッドは、重複行を削除して上へ詰めてくれるメソッドです。
このままでは要件に合わないため、行列入れ替えればできると思った次第です。
ただ処理が速くなるかは不明です。
https://excwlvba.blogspot.com/2013/06/removeduplicates.html
ありがとうございます。
上に詰めるにも時間かかりました。
回答1件
あなたの回答
tips
プレビュー