集計対象レコードのうち、特定の値を含むレコードを削除するVBAサンプルコードをご紹介します。データクレンジングなどで、集計対象外のデータを含むレコードをあらかじめ削除しておきたい場合などにも利用できます。
目次
VBAコード実行確認用サンプルファイル
本記事でご紹介するVBAコードを、実際に実行して確かめて頂けるサンプルファイルを用意しましたのでよろしければダウンロードしてお使いください。
サンプルシート
サンプルシートは、架空のくだもの屋さんの在庫管理表を例に用意しました。項目は、「商品ID」、「商品名」、「在庫」、「原価」、「仕入担当」、「仕入先」、「価格更新日」の7項目です。
集計元レコードから特定の値を含むレコードを削除するVBAサンプルコード
集計元レコードとなるくだもの屋さんの在庫管理リストから、仕入担当のデータが「鈴木」であるレコードを削除するVBAサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Option Explicit '仕入担当「鈴木」のレコードを削除 Sub Sample() Dim lngERow As Integer 'データ最終行番号用変数 Dim r As Integer 'ルーチン処理用変数 'レコード最終行番号取得 lngERow = Range("A" & Rows.Count).End(xlUp).Row '繰り返し処理 For r = lngERow To 2 Step -1 '仕入担当が「鈴木」の場合にレコード削除 If Cells(r, 5) = "鈴木" Then '行全体削除 Cells(r, 1).EntireRow.Delete End If Next End Sub |
サンプルファイルに標準モジュールを挿入した後、上記VBAコードを標準モジュールにコピペして実際に実行して試してみてください。
Tips
標準モジュールの挿入方法
特定の値を削除するVBAコードのアルゴリズム
VBA実行結果は下図の通り、仕入担当が「鈴木」のデータを含む3件のレコードが削除されます。
5行目:Dim lngERow As Integer
9行目:lngERow = Range("A" & Rows.Count).End(xlUp).Row
VBAコード5行目は、集計元レコードの最終行番号を保持するための変数宣言です。その変数lngERowに実際の値( = 集計元レコードの最終行番号)を格納しているのがVBAコード9行目になります。
15~20行目:If Cells(r, 5) = "鈴木" then ~ End If
ここで、鈴木さんのレコードと他のレコードの選別をしています。Cells(r, 5)は、サンプルシート上各レコードの5列目「仕入担当」を指しています。ここが文字列「鈴木」と一致したら、then以降が実行されます。
18行目:Cells(r, 1).EntireRow.Delete
If文で条件が一致した場合に実行されるVBAコードになります。 If文 で条件を満たした「鈴木」のレコードだけが、実行されレコードが削除されます。
以上より、今回のコードについてまとめると、まず行削除ですので、最終レコードから実行させます。そして、繰り返し処理の中、仕入担当が「鈴木」のレコードだけをIf文で選別することにより、鈴木さんのレコードだけを削除しています。
Tips
集計元レコードの削除を、レコード最終行から処理する理由
まとめ
今回のVBAレコードは、特定の値を持つレコードを削除する例をお話ししました。前回お話しした通り、レコードの行削除の場合、For文をレコードの最終行番号から始めます。また特定の値を選別するためにIf構文を使いました。