サイト内検索

VBA基本構文 基本

VBAコードの分岐条件(SELECT文)

SELECT文は、集計対象レコードのデータの値によって処理を分ける事ができるVBAの基本コードです。分岐条件が多い場合、同じ分岐処理をするIf文よりもコードがスッキリします。

また分岐条件の指定方法にもいくつかの方法がありますが、本記事ではVBA集計業務で使う基本的な分岐条件の指定方法についてお話をしたいと思います。

サンプルファイル紹介

まずはサンプルシートを用意してください。シート名は「SampleSheet01」です(下図)。

SampleSheet01
SampleSheet01

SampleSheet01は、ある果物屋さんの商品管理シートを練習用に作ったものです。本記事では、このサンプルシートを使いながら複数のSelect文に関するサンプルコードをご紹介していきます。

文字列データにより条件分岐させるVBAサンプルコード

はじめに分岐条件が文字列の場合のサンプルコードをご紹介します。

 

このコードは、文字列を条件として処理を分岐させるサンプルコードです。具体的には、集計対象レコードの仕入先データ(文字列)を判定基準にします。

詳しいコードの説明の前に、試しに実行してみでください。ちゃんと下のように、さくらんぼの仕入先が、ワークシートの内容と一致して表示されましたでしょうか。

Select文を含むVBAサンプルコードの実行結果
実行結果

ではVBAコードの解説になります。

10~28行目:Select Case ~ End Select
VBAコード10行目の「Select Case」直後には、条件を判定するための基準を指定します。

今回の例では、下図赤枠内のように「Cells(r, 6)」がその判定基準になります。ここで「Cells(r, 6)」は、r行6列目のセルのデータという意味ですので「仕入先」のデータ(文字列)が判定基準になります。

Select文の条件式説明

12, 16, 20, 24行目:Case ~
判定基準の分岐条件を書くところになります。

Select文の分岐条件説明
分岐条件を書く場所

それぞれ、「Case」の後ろには「仕入先」別に4パターンの分岐条件が並べられてますよね。先ほどの判定基準「Cells(r, 6)」の仕入先の内容によって、マッチした分岐条件の次のVBAコードが実行されます。

今回のケースで説明しますと、Cells(r, 6)の「仕入先」は「C市場」ですので、下図赤枠内のコードが実行されます。

Select文条件が一致した後の実行分説明
分岐条件Case "C市場"の実行コード

If文の時と同様、ちょっとまとめてみました。

Select文まとめ説明図
SELECT文まとめ

If文と同じく、いずれか1条件が満たされれば、他の条件のVBAコードは実行されることはありません。

今回の例でいうと、分岐条件3(C市場)が満たされた結果、③のコードが実行されます。結果的に、他の①、②、④は実行されずに、続きはEnd Selectの先のコードから実行されることになります。

数値データにより条件分岐させるVBAサンプルコード

前項はSelect文の判定基準や分岐条件に文字列を使用しました。今度はそれらに数値を使ういくつかのサンプルコードをご紹介します。

分岐条件に数値を指定するサンプルコード

分岐条件に数値を指定するサンプルコードのご紹介です。Select文のCase以降に指定する分岐条件の方法に、1つあるいは複数の数値を書いて指定する方法があります。

各分岐条件に1つの値を指定するサンプルコード

分岐条件に数値を指定するサンプルコードは、Case以降に1つの数値を指定する書き方が基本になります。では、サンプルコードをご覧ください。

 

実行すると以下のようにさくらんぼの原価が表示されます。

1つの整数値を指定したサンプル
1つの整数値を指定したサンプル

コードの説明については、以下の図と一緒にお話ししますね。

11行目のさくらんぼの原価が出力される

さくらんぼの行番号はr = 11です。よって、「Select Case」の右に記載されている判定基準値Cells(r, 4)(朱書部)は200になります。

つぎに、Case以下の分岐条件を見てみます。Caseの横に1つの数値があります。1段目は100, 2段目は200のように各1つの数値があり、前項で説明しました通り、上から判定基準に照らし合わせて合致した分岐条件の下のVBAコードが実行されます。

具体的には、今回の判定基準は200ですので、2段目の「Case 200」に合致します。よって、VBAコード13行目が実行されて先ほどのメッセージが表示されました。

Case Elseの使い方

今回は3段目の分岐条件に「Case Else」とあります。これは、「その他の条件」と言う意味で使われます。例えば今回の場合、1段目は100, 2段目は200ですので、Case Elseの条件は、「100でも200でもないその他の値」ということになります。

試しにVBAコード5行目のr=11(さくらんぼ)を、r=2に変えて再度実行してみてください。下図のようにりんごの原価30円に対するSelect文での条件判定結果が表示されます。

りんごの原価15円の判定結果

各分岐条件に複数の値を指定するサンプルコード

こんどは、分岐条件に複数の数値を指定するサンプルコードをご紹介します。

 

上のVBAコードは、商品の原価が10の倍数で100円未満か、100の倍数で1000円未満か、10の倍数で100円以上1000円未満の3つのケースを判別するものです。

条件判定の内容についてはさておき、ここでは分岐条件に複数の数値を指定する書き方をご紹介します。具体的には、1つの分岐条件に対し複数の値が当てはまる場合は、条件となる複数の数値を「,」(カンマ)を使って指定することができます。

分岐条件に数値の範囲を指定するサンプルコード

つぎのサンプルコードは、条件判定に整数値の範囲を指定する場合です。

 

Caseに複数の数値範囲と複数の数値を混在させて分岐条件を指定する方法

コードの説明については、条件指定に数値や数値範囲を用いる応用的な使い方を含めてつぎの図で説明しますね

数値範囲を分岐条件に指定する応用的な使い方
数値範囲を分岐条件に指定する応用的な使い方

サンプルコードでは、Caseの後に整数値の範囲を指定していますが、上図のように、「,」(カンマ)を使い複数の範囲を指定することができます。さらに、数値と数値範囲を混在させて指定することもできます。

分岐条件に数値の範囲を指定するサンプルコード

つぎのサンプルコードは、分岐条件に小数点以下を考慮した場合の指定方法です。

前項までは整数値を中心にサンプルコードをご紹介してきました。今回は、条件判定に使うデータが整数値ではない小数点を含む数値の場合です。

具体的には、サンプルファイルのデータ項目にある「価格更新日」を使ったサンプルコードをご紹介します。ここでサンプルファイル上にある価格更新日を見ますと、日にちまでしか入っておりませんので、一見整数値ではないかともいえそうです。

ところが、データベースなどのデータ作成日時やデータ更新日時などは、一般的にはレコードの作成・更新が行われた日時で記録されますので、何時何分何秒までデータを持つのが普通です。

何時何分何秒については、小数点以下になりますので、今回のサンプルコードを応用することで小数点以下を考慮した分岐判定をすることができます。

それでは、サンプルコードのご紹介です。

 

コードの内容については、下図で説明しますね。

時分秒単位まで分岐条件で指定するサンプルコード
時分秒単位まで分岐条件で指定するサンプルコード

まず条件判定箇所に書かれている「Case Is <」の「Is」ですが、条件判定に等号、不等号を指定する際に自動的に記述されます。

前項までにご紹介した文字列や整数値を判定条件に指定する際にも、「Case Is = "A市場"」や「Case Is = 10」のように、「=」を入力すると「Is」が自動で記述されますが、既にご紹介したサンプルコードのように等号の場合は、等号を省略して記述するほうが可読性がよくなるためおすすめです。

図に戻りますが、今回の条件判定には年月日の不等号を用いることで、小数点以下を含めた値を判別することができます。

具体的には、1段目のCaseから「2019年1月1日未満=2019年1月1日00:00:00より前」というように1秒単位で判別しています。続く2段目のCaseでは「2019年1月1日00:00:00から2019年2月1日00:00:00より前」、さらに3段目のCaseでは「2019年2月1日00:00:00から2019年3月1日00:00:00より前」、4段目のCaseでは「2019年3月1日00:00:00から2019年4月1日00:00:00より前」となります。

そして最後の5段目のCase Elseでは、上記以外となるので「2019年4月1日00:00:00から」という条件指定になります。

まとめ

VBAコードの分岐条件構造を形成する構文Select文について、いくつかの条件分岐指定方法を含めてお話ししました。

今回のサンプルコードでは、さくらんぼの場合の実行結果を中心にお話ししてきましたが、他の商品の行番号を指定して、各自で色々な商品の実行結果を確認したり、実際のコードを手書きで写してみることをおすすめします。

また経験上、Select文もIf文同様大変よく使いますので、ぜひ今回の使い方を基本として使い方を覚えてくださいね。

Tips:Select文以外のVBA基本構文
For ~ Next文(繰り返し)
For Each ~ Next文(繰り返し)
Do ~ Loop文(繰り返し)
If文(分岐)

[スポンサーリンク]



サイト内検索

-VBA基本構文, 基本
-

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