教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA プログラミング】(条件判断10)入力データを条件判断し結果を表示する方法(Select文とFor~Next文の組み合わせによる複数判断)

f:id:m_kbou:20200420173208p:plain

入力したデータを条件判断し結果を表示する方法について説明します。今回はSelect文とFor~Next文の組み合わせによる複数判断について説明します。

 

 

例題

<実行>ボタンにVBAマクロが登録されており、ボタンをクリックする事で入力したデータを条件判断して結果を表示します。内容は以下の通りとなります。

[実行前]:

A列に種類が入力されており、B列に金額が入力されている。

f:id:m_kbou:20200316180608p:plain

<判断条件>

・種類(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列の結果欄に表示される。

f:id:m_kbou:20200316180620p:plain

 

プログラミング

プログラミングは以下の通りとなります。

[記述例]:

Sub サンプル()

  Dim 行 As Double

  For 行 = 3 To 8
    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
  Next

End Sub

最初に変数:行を指定します。

次にFor~Next文を使用して変数:行に3~8までの数値を順次セットしながらループさせます。

このループによりA列に入力されている種類とB列に入力されている金額の2つの条件で判断します。条件判断にはSelect文を使用します。

-------------------------------

最初にA列の種類を判定するため、Trim(Range("A" & 行))と記述します。Trim関数は文字列前後にスペース文字が入っていた場合に取り除くための指定となります。種類は”野菜”・”果物”・”お肉”で判断するため、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セルの種類及びB3セルの金額で条件判定を行います。A3セルには”野菜”が入力されており、B3セルには100が入力されているため、C3セルへの結果は”高い”をセットします。

-------------------------------

次に変数:行に4がセットされ、A4セルの種類及びB4セルの金額で条件判定を行います。A4セルには”果物”が入力されており、B4セルには50が入力されているため、C4セルへの結果は”普通”をセットします。

-------------------------------

次に変数:行に5がセットされ、A5セルの種類及びB5セルの金額で条件判定を行います。A5セルには”お肉”が入力されており、B5セルには80が入力されているため、C5セルへの結果は”安い”をセットします。

次に変数:行に6がセットされ、A6セルの種類及びB6セルの金額で条件判定を行います。A6セルには”果物”が入力されており、B6セルには20が入力されているため、C6セルへの結果は”安い”をセットします。

-------------------------------

次に変数:行に7がセットされ、A7セルの種類及びB7セルの金額で条件判定を行います。A7セルには”野菜”が入力されており、B7セルには45が入力されているため、C7セルへの結果は”普通”をセットします。

-------------------------------

次に変数:行に8がセットされ、A8セルの種類及びB8セルの金額で条件判定を行います。A8セルには”野菜”が入力されており、B8セルには60が入力されているため、C8セルへの結果は”普通”をセットします。

---------------------------------

との意味になります。

f:id:m_kbou:20210426153459p:plain

 

ダウンロード

上記サンプルプログラムを使用したい場合は、こちらからダウンロードして下さい。

drive.google.com

 

関連プログラム

www.osiete-excelvba.work