条件に一致した値を抽出するときのVBAの例をご紹介します。
「売上明細の条件抽出」をとおしてマクロ作成の考え方をお伝えしたいと思います。
こちらの例では「If ~ Then」「For ~ Next」に加えて「変数」をつかいます。
実用的な使い方のヒントがおおく含まれていますので、ぜひ考え方を理解しておいてください。
こちらでご紹介するおもな内容です。
- 「If ~ Then」の実用的な使い方
- 「For ~ Next」の実用的な使い方
- 「変数」の使い方
条件一致の抽出
抽出条件に一致する売上明細をcheckしたい
こちらの例をつかってご説明をします。とある売上一覧の設定です。
事前準備
マクロで参照したいセルに対して事前準備をしておきましょう。
具体的には次の項目でご説明します。
変数の設定
抽出条件となっている「セルB3」と「セルB4」の変数を設定します。
設定が必須というのもではありませんが、のちにプログラムの修正があったときにミスを少なくするためにします。
具体的にはこのような準備をします。
Dim ijo As Long, miman As Long ijo = Cells(3, 2) miman = Cells(4, 2)
「~以上」の条件となる「セルB3」に「変数:ijo」を設定します。
また、「~未満」の条件となる「セルB4」に「変数:miman」を設定します。
いずれの変数の型も「整数型:Long」として2つまとめて定義しています。
最終行の取得
売上一覧のような時期よって行数に変動があるリストにたいして設定します。
Dim last_row As Long last_row = Cells(Rows.Count, 2).End(xlUp).Row
こちらの例では、値に空白のない「B列」を基準にしています。
最終行の取得の具体的な方法はこちらです。
- 「B列」の一番下のセルを指定する
- Endプロパティをつかって一番下から上にむかって、最初に一致するセルを指定する
- 「Row」をつかって「行」を取得する
- これを「変数:last_row」に代入する
コードの構成
では、全体をとおして記述したいコードの内容を考えてみましょう。
こちらが記述したい内容です。
【スタート】マクロの名前:matome1 (変数の設定)「変数:ijo」「変数:miman」を整数型にする 「変数:ijo」に「セルB3」を代入する 「変数:miman」に「セルB4」を代入する (変数の設定)「変数:last_row」を整数型にする 「変数:last_row」に2列目の最下行を代入する (変数の設定)「変数:i」を整数型にする (繰返処理の開始)「変数:i」に10から最終行までを順番に代入する (条件分岐の開始)もし「セル(変数:i,4)」の値が「変数:ijo」以上かつ「変数:miman」未満ならば 「セル(変数:i,4)」に「該当」と入力をする (条件分岐の終了) (つぎの繰返処理へ) 【ゴール】
こちらがコードです。
Sub matome1() Dim ijo As Long, miman As Long ijo = Cells(3, 2) miman = Cells(4, 2) Dim last_row As Long last_row = Cells(Rows.Count, 2).End(xlUp).Row Dim i As Long For i = 10 To last_row If Cells(i, 4).Value >= ijo And Cells(i, 4) < miman Then Cells(i, 1).Value = "該当" End If Next End Sub
こちらがマクロの実行結果です。記述したとおりの結果となりました。
まとめ
今回は例をとおして「If ~ Then」と「For ~ Next」の組み合わせの方法をご紹介しました。
基本的な内容の組み合わせですが、とても便利な使い方ができます。
このような考え方に慣れていけば行数が変わっても同じ考え方で対処できます。
あくまでわたしの実体験ですが実際の業務でマクロによる自動化を進めようとしたときには、このような組み合わせを用いることがほとんどです。