列の重複セル比較して行を削除するマクロ
を示す。
■Excel-VBA 列の重複セル比較して行を削除するマクロ
Sub sample24() Dim MR As Long Dim MC As Long Dim DP As Long MR = Cells(Rows.Count, 1).End(xlUp).Row 'ω'最終行,A:A MC = Cells(1, Columns.Count).End(xlToLeft).Column 'ω'1:1,最終列 DP = 15 Range(Cells(1, 1), Cells(MR, MC)).Sort _ Key1:=Cells(1, DP), Order1:=xlAscending, _ Header:=xlYes Dim j As Long With Cells(2, DP) For j = .CurrentRegion.Rows.Count To 1 Step -1 If .Offset(j, 0) = .Offset(j - 1, 0) Then .Offset(j, 0).EntireRow.Delete Next j End With End Sub※[2.~4.] 変数宣言。
※[5.~6.] 最終行数、最終列数取得。
※[7.] 重複セル比較に15列目(O列)を指定。
※[9.~11.] 15列目(O列)昇順で全体を並べ替え。
※[13.] 変数宣言。
※[14.~18.] 2行目、15列目(O列)のセルを基準とする。最終行セルと1つ上のセルを比較して重複なら
最終行を削除する。
最終行から1行目までFor Nextループ。
■マクロ実行対象
「部品データ_191128.xlsx」の「部品表」シート。15列目(O列)。■マクロ実行結果
実行すると、15列目(O列)のセル重複した行はすべて削除される。
「AA」、「旧方式」、「新方式」、「」(ブランク)が
1行ずつ残る。
■あとがき
今回はExcel VBAマクロ。列の重複セル比較して行を削除するマクロ
を示した。
LibreOffice Basicで使う場合は
コードの先頭行に
「Option VBASupport 1」を記述する。
Option VBASupport 1 Sub sample24() Dim MR As Long Dim MC As Long Dim DP As Long MR = Cells(Rows.Count, 1).End(xlUp).Row 'ω'最終行,A:A MC = Cells(1, Columns.Count).End(xlToLeft).Column 'ω'1:1,最終列 DP = 15 Range(Cells(1, 1), Cells(MR, MC)).Sort _ Key1:=Cells(1, DP), Order1:=xlAscending, _ Header:=xlYes Dim j As Long With Cells(2, DP) For j = .CurrentRegion.Rows.Count To 1 Step -1 If .Offset(j, 0) = .Offset(j - 1, 0) Then .Offset(j, 0).EntireRow.Delete Next j End With End SubFor Nextループでセルを逐次比較するので
データ量が多い場合(十万行単位)時間がかかる。
配列を使用して処理時間を短くする方法を
■LibreOffice-VBA 重複セルに連番をふって1以外削除するマクロ
では使用しているので参考。
以上。