入力したデータを条件判断し結果を表示する方法について説明します。今回はSelect文とFor~Next文の組み合わせによる複数判断について説明します。
例題
<実行>ボタンにVBAマクロが登録されており、ボタンをクリックする事で入力したデータを条件判断して結果を表示します。内容は以下の通りとなります。
[実行前]:
A列に種類が入力されており、B列に金額が入力されている。
<判断条件>
・種類(A列セル)に”野菜”が入力されている場合
∟金額(B列セル)が30未満の場合、結果(C列セル)に”安い”をセット
∟金額(B列セル)が30以上70未満の場合、結果(C列セル)に”普通”をセット
∟金額(B列セル)が上記以外の場合、結果(C列セル)に”高い”をセット
・種類(A列セル)に”果物”が入力されている場合
∟金額(B列セル)が50未満の場合、結果(C列セル)に”安い”をセット
∟金額(B列セル)が50以上80未満の場合、結果(C列セル)に”普通”をセット
∟金額(B列セル)が上記以外の場合、結果(C列セル)に”高い”をセット
・種類(A列セル)に”お肉”が入力されている場合
∟金額(B列セル)が300未満の場合、結果(C列セル)に”安い”をセット
∟金額(B列セル)が300以上500未満の場合、結果(C列セル)に”普通”をセット
∟金額(B列セル)が上記以外の場合、結果(C列セル)に”高い”をセット
[実行後]:
判定結果がC列の結果欄に表示される。
プログラミング
プログラミングは以下の通りとなります。
[記述例]:
Sub サンプル()
Dim 行 As Double
行 = 3
Do Until Trim(Range("A" & 行)) = ""
Select Case Trim(Range("A" & 行))
Case "野菜"
Select Case Trim(Range("B" & 行))
Case Is < 30
Range("C" & 行) = "安い"
Case Is < 70
Range("C" & 行) = "普通"
Case Else
Range("C" & 行) = "高い"
End Select
Case "果物"
Select Case Trim(Range("B" & 行))
Case Is < 50
Range("C" & 行) = "安い"
Case Is < 80
Range("C" & 行) = "普通"
Case Else
Range("C" & 行) = "高い"
End Select
Case "お肉"
Select Case Trim(Range("B" & 行))
Case Is < 300
Range("C" & 行) = "安い"
Case Is < 500
Range("C" & 行) = "普通"
Case Else
Range("C" & 行) = "高い"
End Select
End Select
行 = 行 + 1
Loop
End Sub
最初に変数:行を指定します。
次に変数:行には初期値として3をセットします。
最後にDo~Loop文を使用して条件判断を行いながら変数:行に数字を1づつ足してループさせます。
ループはA列のセルにデータが入力されていない場合に抜ける事とするため、Trim(Range("A" & 行)) = ""と記述します。Trim関数は文字列前後にスペース文字が入っていた場合に取り除くための指定となります。
このループによりA列に入力されている種類とB列に入力されている金額の2つの条件で判断します。
条件判断にはSelect文を使用します。
---------------------------------
最初にA列セルの種類を判定するため、条件判断セルはTrim(Range("A" & 行))と記述します。種類は”野菜”・”果物”・”お肉”で判断するため、Case "野菜"・Case "果物"・Case "お肉"で各々記述します。
---------------------------------
次にB列セルの金額を判定するため、条件判断セルはTrim(Range("B" & 行))と記述します。種類により金額の判定条件が異なるため、各種類別に金額判定条件を記述します。
-----------------------
種類が”野菜”の場合、金額(B列セル)が”30未満の場合”・”30以上70未満の場合”・それ以外の場合に分ける必要があるため、ここでもSelect文を使用した条件分岐を行います。”30未満の場合”はCase Is < 30、30以上70未満の場合はCase Is < 70、それ以外の場合はCase Elseを記述し、それぞれの結果(C列セル)を表示させる記述をRange("C" & 行) = "安い"・Range("C" & 行) = "普通"・Range("C" & 行) = "高い"とします。
-----------------------
種類が”果物”の場合、金額(B列セル)が”50未満の場合”・”50以上80未満の場合”・それ以外の場合に分ける必要があるため、ここでもSelect文を使用した条件分岐を行います。”50未満の場合”はCase Is < 50、50以上80未満の場合はCase Is < 80、それ以外の場合はCase Elseを記述し、それぞれの結果(C列セル)を表示させる記述をRange("C" & 行) = "安い"・Range("C" & 行) = "普通"・Range("C" & 行) = "高い"とします。
-----------------------
種類が”お肉”の場合、金額(B列セル)が”300未満の場合”・”300以上500未満の場合”・それ以外の場合に分ける必要があるため、ここでもSelect文を使用した条件分岐を行います。”300未満の場合”はCase Is < 300、300以上500未満の場合はCase Is < 500、それ以外の場合はCase Elseを記述し、それぞれの結果(C列セル)を表示させる記述をRange("C" & 行) = "安い"・Range("C" & 行) = "普通"・Range("C" & 行) = "高い"とします。
---------------------------------
上記の記述内容からも既にお気づきだとは思いますが、Select文は上から順番に条件判定を行い、指定した条件に合った場合は記述した処理が実行された後にSelect文を抜ける事になります。
ループ内の処理内容を説明すると、
「まず最初に変数:行に3がセットされているので、A3セルにデータが入力されているか判定します。A3セルにはデータが入力されているため、A3セルの種類及びB3セルの金額で条件判定を行います。A3セルには”野菜”が入力されており、B3セルには100が入力されているため、C3セルへの結果は”高い”をセットします。その後に変数:行に1を足し込みます。この足し込みにより変数:行の値は3+1=4となります。
---------------------------------
次のループでは変数:行に4がセットされているので、A4セルにデータが入力されているか判定します。A4セルにはデータが入力されているため、A4セルの種類及びB4セルの金額で条件判定を行います。A4セルには”果物”が入力されており、B4セルには50が入力されているため、C4セルへの結果は”普通”をセットします。その後に変数:行に1を足し込みます。この足し込みにより変数:行の値は4+1=5となります。
---------------------------------
次のループでは変数:行に5がセットされているので、A5セルにデータが入力されているか判定します。A5セルにはデータが入力されているため、A5セルの種類及びB5セルの金額で条件判定を行います。A5セルには”お肉”が入力されており、B5セルには80が入力されているため、C5セルへの結果は”安い”をセットします。その後に変数:行に1を足し込みます。この足し込みにより変数:行の値は5+1=6となります。
---------------------------------
次のループでは変数:行に6がセットされているので、A6セルにデータが入力されているか判定します。A6セルにはデータが入力されているため、A6セルの種類及びB6セルの金額で条件判定を行います。A6セルには”果物”が入力されており、B6セルには20が入力されているため、C6セルへの結果は”安い”をセットします。その後に変数:行に1を足し込みます。この足し込みにより変数:行の値は6+1=7となります。
---------------------------------
次のループでは変数:行に7がセットされているので、A7セルにデータが入力されているか判定します。A7セルにはデータが入力されているため、A7セルの種類及びB7セルの金額で条件判定を行います。A7セルには”野菜”が入力されており、B7セルには45が入力されているため、C7セルへの結果は”普通”をセットします。その後に変数:行に1を足し込みます。この足し込みにより変数:行の値は7+1=8となります。
---------------------------------
次のループでは変数:行に8がセットされているので、A8セルにデータが入力されているか判定します。A8セルにはデータが入力されているため、A8セルの種類及びB8セルの金額で条件判定を行います。A8セルには”野菜”が入力されており、B8セルには60が入力されているため、C8セルへの結果は”普通”をセットします。その後に変数:行に1を足し込みます。この足し込みにより変数:行の値は8+1=9となります。
---------------------------------
次のループでは変数:行に9がセットされているので、A9セルにデータが入力されているか判定します。A9セルにはデータが入力されていないため、ループを抜ける事になります。
---------------------------------
との意味になります。
ダウンロード
上記サンプルプログラムを使用したい場合は、こちらからダウンロードして下さい。