文字列の右側から一定の長さを取得するRight関数を使用して、セルの中の文字列から必要な情報を取り出します。右側2文字が共通する文字であることを利用した行削除のサンプルコードです。
では今回のサンプルファイルになります。サンプルファイルの内容は、これまで使ったことのあるSampleSheet02と同じ、小計行つきです。
続いて今回のコードになりますので、ぜひ真似して書いてみてくださいね。
ではまずは実行してみましょう。上手くいけば小計行がきれいに削除されるはずです。
つづいてVBAコードの解説にいきますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | Option Explicit 'Right関数の使用例 Sub Sample036() Dim wstSelf As Worksheet 'ワークシート用変数 Dim lngERow As Long 'レコード最終行番号用変数 Dim r As Long '行ルーチン処理用変数 'ワークシートオブジェクトを変数に設定 Set wstSelf = Worksheets("Right関数") With wstSelf 'レコード最終行番号取得 lngERow = .Range("B" & .Rows.Count).End(xlUp).Row '行削除なので最終レコードから処理 For r = lngERow To 2 Step -1 '「商品名」の下2桁が「市場」である場合行削除 If Right(.Cells(r, 2), 2) = "市場" Then .Cells(r, 2).EntireRow.Delete End If Next End With End Sub |
20行目:If Right(.Cells(r, 2), 2) = "市場" Then
If文の条件式です。Right関数が使われている左辺の結果が、右辺の「市場」と等しい場合、Then以降で行削除するVBAコードが実行されます。
では初登場になりますRight関数について、次図で説明しますね。
Right関数は、文字列を処理の対象にします。処理対象の文字列の右側から、指定した文字数分の文字列を結果として返します。
使い方は、Right()の中に「処理する対象のセル」と「抽出する文字数」を「,」を使って並べます。
以上を踏まえて、今回の例では、まずIf文の条件式の中で左辺と右辺を比較しています。右辺は「市場」ですので、左辺も「市場」であればThen以降のVBAコードが実行されます。
今回の目的は、サンプルシートから余計な小計行を削除することでしたが、その小計行の2列目(商品名欄)には必ず「~市場」という見出しが入ってますよね。
よってこの特徴に気づき、小計行の2列目(商品名)の右2文字が「市場」である行をすべて削除すれば、余計な行がすべて削除できるというロジックを採用しました。さらに、果物で「~市場」という名前が無いことも気づきになります。
まとめ
今回は、Left関数と一緒に覚えておくとよいRight関数についてお話ししました。これらは使い方も左右反対なだけですので、ぜひ対にして覚えてくださいね。