[PR]当サイトはアフィリエイト広告を利用しています。
VBAゼロからシリーズです。全体はこちら。
はじめに
今回は条件分岐について解説します。
読んで字のごとく条件で分岐する処理です。
前回は変数についてやりました。
普通はもう少し変数の型について詳しくやるのですけど、色々な細かい定義を暗記する前にプログラミングの醍醐味に触れていく方針で行きます。
If文の使い方
簡単なIf文を見ていただき、なんとなく雰囲気をつかんでみましょう。
Sub sample()
Dim a As Integer
a = 1
If a = 1 Then
MsgBox "aは1です"
Else
MsgBox "aは1ではありません"
End If
End Sub
If~End IfまでがIf文となります。Ifの後にある「a = 1」というのが条件式です。条件式中では「=」は代入記号ではなく「右と左が同じかどうか」という意味に変わります。
If~Thenの後に書かれた内容が、条件式が真(True)のとき実行されます。
ElseとEnd Ifまでが条件式が偽(False)のとき実行されます。例えば上のプログラムの3行目に「a = 2」と書けば条件式が偽になってElseの中身が実行されます。
流れ図(フローチャート)で描くと次のようになります。
ひし形の部分が条件式です。ここがIf文の要です。条件式が真なら「Yes」の先に遷移します。
条件式が偽なら「No」の先に遷移します。
今回の例題
エクセルのシートのB3、C3、D3セルにそれぞれ3、5、7と入力します。
そして今回の例題は次のようなものとします。
「B3とC3の値を比較して、B3のほうが大きければB3とD3の値を掛けた値を出力せよ。またそうでないならD3の値をそのまま出力せよ」
エクセル関数で求める場合
IF関数を使います。
D4セルを選択して関数入力欄に次のように入力します。
=IF(B3>C3,B3*D3,D3)
今回はIF関数を使いました。
IF関数の使い方は
=IF(条件式,条件に合致した場合の処理,条件に合致しなかったときの処理)
このように使います。
今回は条件式でB3とC3の値を比較しています。
B3が大きいかどうかを判定するので「>」を使います。
この演算子は左の値が大きければ真(条件に合致した)、そうでなければ偽(条件に合致していない)という結果を返します。
B3>C3
でB3の値がC3の値より大きいかどうか判定します。
今回はB3の値のほうが小さいので偽となります。
また条件に合致したときの処理は
B3*D3
です。問題文の通りです。
合致したらこの計算結果が実行されます。
条件に合致しなかったときの処理は
D3
です。そのままD3の値が出力されます。
「真」とか「偽」というワードが出てきて、なんとなく昔高校のときやった集合論を思い出した方もいらっしゃるかもしれません。
正解です。いわゆるあれをやっています。
ちゃんとIF関数を使いこなすのなら、ベン図を書いて、和集合、積集合、ド・モルガンの公式とかを駆使する必要があります。
ですが、最初のうちは色々な条件を書いてみて、エクセルの挙動を理解してみて慣れていったほうがいいと思います。
まずは条件分岐を体験してみましょう。
VBAで求める場合
VBA入力欄を表示させて次のように入力します。
Sub ifSample()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = Range("B3").Value
b = Range("C3").Value
c = Range("D3").Value
If (a > b) Then
Range("E4").Value = a * c
Else
Range("E4").Value = c
End If
End Sub
実行するとE4セルに7と出力されます。
コードの解説
Dim a As Integer
についてはこちらも参考にしてください。
今回はB3、C3、D3の値を扱うので、3つ変数を定義します。
a = Range(“B3”).Value
これでB3セルの値を変数aに格納します。
If (a > b) Then
Range("E4").Value = a * c
Else
Range("E4").Value = c
End If
Ifの後に条件式を入力して、Thenの後に条件に合致したときの処理を書きます。
Elseの後には条件に合致しなかったときの処理を書きます。
Ifの後の「()」は付けても付けなくてもよいです。条件式をより分かりやすくしたいときは「()」で囲みましょう。
最後にEnd If
でIf文は完成します。
今回のIf文だけ流れ図に描くと次のようになります。
If文の書き方をおさらいすると次のような感じになります。
プログラムは上から下に向かって実行される
お気づきかもしれませんが、プログラムは基本的に上から下に向かって実行されていきます。
そのためIf文の後に変数の定義を書くとうまくプログラムが動きません。
器と値を準備してからそれを使う必要があるのです。
使ってから器と値を準備すると動かないのです。
プログラムの上下の順番には注意しましょう。
その他こまごまとした解説
a>b
これは左の値と右の値を比較して左の値のほうが大きければ真(条件に合致)、そうでなければ偽(条件に合致せず)という結果を返します。
また変数とセルの値が関係しているのなら
Dim d As Integer
d = Range(“E4”).Value
d = a * c
とやってみたくなるかもしれません。
残念ながらこれはできません。
変数はいわゆるメモなので、元の値とは独立した存在です。例外もありますがね。
E4の値にアクセスしたいときは
Range(“E4”).Value = a*c
と面倒でも入力しましょう。
セルに値を書き込むときはRange()を使うのが基本です。
まとめ
今回は条件分岐について解説しました。
条件分岐はまだまだ複雑になっていきますが、基本はこんな感じです。
色々な条件を書いて感覚をつかんでいくのが上達への道です。