サイト内検索

基本 行・レコード操作

VBAコードで特定の値を含むレコードを削除

集計対象レコードのうち、特定の値を含むレコードを削除するVBAサンプルコードをご紹介します。データクレンジングなどで、集計対象外のデータを含むレコードをあらかじめ削除しておきたい場合などにも利用できます。

VBAコード実行確認用サンプルファイル

本記事でご紹介するVBAコードを、実際に実行して確かめて頂けるサンプルファイルを用意しましたのでよろしければダウンロードしてお使いください。

サンプルシート

サンプルシートは、架空のくだもの屋さんの在庫管理表を例に用意しました。項目は、「商品ID」、「商品名」、「在庫」、「原価」、「仕入担当」、「仕入先」、「価格更新日」の7項目です。

あるくだもの屋さんの在庫管理リスト
あるくだもの屋さんの在庫管理リスト

集計元レコードから特定の値を含むレコードを削除するVBAサンプルコード

集計元レコードとなるくだもの屋さんの在庫管理リストから、仕入担当のデータが「鈴木」であるレコードを削除するVBAサンプルコードです。

 

サンプルファイルに標準モジュールを挿入した後、上記VBAコードを標準モジュールにコピペして実際に実行して試してみてください。

Tips
標準モジュールの挿入方法

特定の値を削除するVBAコードのアルゴリズム

VBA実行結果は下図の通り、仕入担当が「鈴木」のデータを含む3件のレコードが削除されます。

VBAコード実行前後のExcelワークシート比較
VBA実行前後

5行目:Dim lngERow As Integer
9行目:lngERow = Range("A" & Rows.Count).End(xlUp).Row

VBAコード5行目は、集計元レコードの最終行番号を保持するための変数宣言です。その変数lngERowに実際の値( = 集計元レコードの最終行番号)を格納しているのがVBAコード9行目になります。

Tips
VBAでレコードの最終行番号を求める方法

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構文を使いました。

Tips
複数列に対し個々の削除条件を指定してから一括でレコードを削除する方法

[スポンサーリンク]



サイト内検索

-基本, 行・レコード操作
-

Copyright© 集計用VBAサンプルコードをやさしく学ぼう , 2020 All Rights Reserved.