列の重複セル比較して行を削除するマクロ
を示す。
■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 Sub
For Nextループでセルを逐次比較するのでデータ量が多い場合(十万行単位)時間がかかる。
配列を使用して処理時間を短くする方法を
■LibreOffice-VBA 重複セルに連番をふって1以外削除するマクロ
では使用しているので参考。
以上。


