対象レコードの項目の値が、ある特定の範囲にある場合に行削除(レコード削除)をするサンプルコードです。最終的な集計をする前に、対象外の値を持つレコードをあらかじめ削除するような場合に利用します。
ではサンプルファイルを用意した後に、つぎの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 Sample027() Dim lngERow As Integer 'データ最終行番号用変数 Dim r As Integer 'ルーチン処理用変数 'レコード最終行番号取得 lngERow = Range("A" & Rows.Count).End(xlUp).Row '繰り返し処理 For r = lngERow To 2 Step -1 '原価が100円以上200円未満の場合にレコード削除 If Cells(r, 4) >= 100 And Cells(r, 4) < 200 Then '行全体削除 Cells(r, 1).EntireRow.Delete End If Next End Sub |
今回のVBAコードは、サンプルシートにあるレコードのうち、「原価」が100円以上で200円未満のレコードを削除するものです。
では、さっそくVBAを実行してみましょう。下のように原価が100円以上200円未満のデータが削除されたでしょうか。
では、引き続き今回のVBAコードについてお話ししますね。
15~20行目:If Cells(r, 4) >= 100 And Cells(r, 4) < 200 Then ~ Next
「Cells(r, 4)」は、各レコードの4列目、すなわち「原価」の値になりますよね。次の、「>=」は「比較演算子」と言います。
VBAコードで使う主なものは以下のとおりです。
- 「>」:左辺より右辺が小さい
- 「<」:左辺より右辺が大きい
- 「=」:左辺と右辺が等しい
- 「>=」:左辺は右辺と等しいか、右辺より大きい
- 「<=」:左辺は右辺と等しいか、右辺より小さい
よって、「Cells(r, 4) >= 100」は、「あるレコードの原価が100円か、100円より大きい」すなわち「原価が100円以上のレコード」となります。
つぎの「And」のお話しの前に、「And」の後ろ「Cells(r, 4) < 200」は、「あるレコードの原価が200円より小さい」、すなわち「原価が200円未満のレコード」となります。
では、お話しが後回しになりました「And」についてです。これは、「論理演算子」と言いますが、VBAコードでは主に以下のものを使います。
- And:Andを挟んだ2つの条件の両方を同時に満たす
- Or:Orを挟んだ2つの条件のうち、どちらか一方を満たす
以上を踏まえ、今回のIf文の条件式について整理してみました。
このIf文の条件「原価が100円以上200円未満」が満たされた場合のみ、Then以降にある18行目のVBAコード「Cells(r, 1).EntireRow.Delete」が実行され、レコードが削除されます。
まとめ
今回は、ある範囲にある値を持つレコードを削除するVBAコードについてお話ししました。そして、その範囲を指定するために用いた「比較演算子」と「論理演算子」の使い方についても触れました。
比較演算子や論理演算子は、レコードの抽出に際して、VBAコード上で頻繁に使われます。ですので、今後のサンプルコードの紹介の中で登場した際には、また詳しくお話ししようと思います。