ExcelVBAの条件分岐の書き方。if文について解説します。

Excel
この記事は約8分で読めます。

VBAでプログラム作成するとき、ある条件によって処理を分岐させたいときがあると思います。

たとえば、名前を入力するセルに間違って数字が入力された場合に、正しく入力するようメッセージを表示させたい、ときなど。

そんな条件分岐をしたいときは「if」を使うことで、処理を分けることができます。

 

この記事はこんな人におすすめです
 ・VBAで条件によってその後の処理を分けたい
 ・VBAの勉強を始めたばかりでif文がわからない

 

構文だけ知りたいという方

If 条件⓵ Then
   条件⓵に一致していた場合の処理
ElseIf 条件⓶ Then
 条件⓶に一致していた場合の処理
Else
  条件⓵と条件⓶に一致していなかった場合の処理
End If

 

if文とは

VBAで条件によって処理を分けたい場合の文として、「if」文があります。

「if」には「もし」という意味があり、「もし○○だったら、△△する」

という内容をVBAで作成したいときに使います。

「if」はVBA以外のプログラム言語でも使用するので、条件分岐を行うためにマスターしておきたい基本の文です。

 

if文の基本的な使い方

If 条件⓵ Then
 条件⓵に一致していた場合の処理
ElseIf 条件⓶ Then
 条件⓶に一致していた場合の処理
Else
   条件⓵と条件⓶に一致していなかった場合の処理
End If

条件はifとThenの間にスペースを入れて書きます。

「Then」は「その時に」という意味です。

ElseIfやElseで使われている、「Else」は「それ以外」という意味があります。

複数条件がある場合は、ElseとIfを組み合わせてElseIfと書き、その後に他の条件を書き条件分岐させます。

そしてどちらの条件にも一致しない場合は、Else(それ以外)で書かれた内容を実行します。

 

実装してみよう

例として、入力されたセルの値によって処理を分けるif文を書きます。

以下の表をExcelで作成しました。

B5セルに、動物の名前を入力してボタンを押すと、入力した動物の種類によって、その動物の鳴き声がC5セルに表示されるようにします。

この例では、

・どうぶつの名前欄に「いぬ」と入力されたら、鳴き声欄に「わんわん」と表示する

・どうぶつの名前欄に「ねこ」と入力されたら、鳴き声欄に「にゃんにゃん」と表示する

という2つの内容を、VBAで処理させたいとします。

上記を処理するタイミングは、[しらべる!]ボタンをクリックしたときです。

処理が発生する動作のことを「イベント」といい、今回の動作では「クリックイベント」といいます。

 

ボタンの作成からクリックイベント登録の手順

ボタンは[開発]メニューの[挿入]からボタンを選択して追加します。

ボタンを設置したい場所をクリックします。

マクロ名の登録画面が出てくるので、マクロ名「ボタン1」の部分をわかりやすい名前に変更して[OK]を押します。

しらべるボタンにしました。

作成したボタンを右クリック→[テキストの編集]でボタン上に表示されているテキストを変えます。

「しらべる!」にしました。何でもいいです。

ボタンを右クリック→[マクロの登録]をクリックします。

先ほどと同じマクロの登録画面が表示されるので、今度は[新規作成]をクリックします。

そうすると、VBAエディタが表示され、しらべるボタンのクリックイベントのエリアが作成されました。

この「Sub しらべるボタン_Click() … End Sub」のエリアの中に、しらべるボタンをクリックした時に処理したい内容を書いていきます。

 

VBAエディタを開く方法

先ほどの、ボタンを右クリックしてマクロの[新規作成]ボタンクリックする方法以外でも、VBAエディタを表示させる方法はあります。

[開発]メニュー内に「Visual Basic」があるので、それをクリックするとエディタが開きます。

クリックイベントに処理を書きます。

クリックイベント内に以下のようにif文を書いていきます。

条件はifとThenの間にスペースを入れて書きます。

1つめのifとThenの間には、

「セルB5に“いぬ”と入力されたら、セルC5に“わんわん”と表示する」

と書きます。

2つめの条件はElseIf … Thenの間に、

「セルB5に“ねこ”と入力されたら、セルC5に“にゃんにゃん”と表示する」

と書きます。

そして、どちらの条件にも当てはまらなかった場合は、

Elseの後に適当に“ほげほげ”と表示するようにしています。

 

VBAを保存(Ctrl + S)し、テストしてみます。

動作が確認できたでしょうか?

 

条件が1つの場合

条件が1つの場合は、ElseIfを省略できます。

If Range("B5").Value = "いぬ" Then
   Range("C5").Value = "わんわん"
End If

 

条件がたくさんある場合

逆に、条件がもっとある場合はElseIfを増やすことも可能。

If Range("B5").Value = "いぬ" Then
 Range("C5").Value = "わんわん"
ElseIf Range("B5").Value = "ねこ" Then
    Range("C5").Value = "にゃんにゃん"
ElseIf Range("B5").Value = "ぞう" Then
    Range("C5").Value = "ぱおぱお"
ElseIf Range("B5").Value = "ぶた" Then
    Range("C5").Value = "ぶひぶひ"
ElseIf Range("B5").Value = "からす" Then
  
  Range("C5").Value = "かぁかぁ"
ElseIf Range("B5").Value = "ひつじ" Then         

  Range("C5").Value = "めぇめぇ"
Else
   Range("C5").Value = "ほげほげ"
End If

 

If文の応用

If文は一列で書くことも可能

If Range("B5").Value = "いぬ" Then Range("C5").Value = "わんわん"

ただし、条件が一致した後の処理が2行に渡るものは、1行では書けません。

例えば以下のようなif文があったとします。

If Range("B5").Value = "いぬ" Then
 Range("C5").Value = "わんわん"
 Range("D5").Value = "ドッグフード"
End If

これを以下のように、処理と処理の間にスペースを入れて無理やり1行にはできません。

If Range("B5").Value = "いぬ" Then Range("C5").Value = "わんわん" Range("D5").Value = "ドッグフード"

それと、ElseIfは1行で書けないみたいです。

Elseを入れて書くことは可能です。

If Range("B5").Value = "いぬ" Then Range("C5").Value = "わんわん" Else Range("C5").Value = "ほげほげ"

1行の方がすっきりしてコードが見やすい、と思った時には1行で書いてみてもいいです。

 

他の条件分岐の方法

条件により処理を分けたい場合は、Select Caseもあります。

Select Caseについては後日詳しく書いていきます。

 

まとめ

VBAで条件によって処理を分岐させたいときは、以下例文を参考にしてください。

If Range("A1").Value = “いぬ” Then
 MsgBox “わんわん”
ElseIf Range("A1").Value = “ねこ” Then
   MsgBox “にゃんにゃん”
Else
   MsgBox “ほげほげ”
End If