前回の記事はこちら
IF文の使い方
さて、前回予告した通り、今回はIF文という少しこれまでと違う要素を解説します。
具体的にどう違うかと言うと、これまでに解説した内容は、1行で完結していた内容ばかりでした。
例えば、
Range("A1").Value = 10
であれば、A1セルに10という値を代入する、という意味でしたし、
Dim cost As Long
であれば、costというLong型の変数を使うよ、という意味でした。
これから解説するIF文は、複数の行に影響があります。
ちなみに、「IF」は「もし~なら」という英単語ですね。
VBAでもその意味は変わりません。
それを踏まえて、次のコードに一度目を通してみて下さい。
Sub IF文を試す()
Dim targetValue As Long
targetValue = Cells(5, 1).Value
If targetValue > 60 Then
Cells(5, 2).Value = "合格"
Else
Cells(5, 2).Value = "不合格"
End If
End Sub
targetValueはLong型の変数ですね。
今回大事なのは、「If」「Then」「Else」「End If」の4つです。
今回「IF文」という説明をしましたが、実際にはこのように、If、Then、Else、End Ifの4つがセットで出てくることがほとんどです。
ちなみに「>」は「右より左の方が大きい」という意味です。算数で習う通りですね。
If targetValue > 60 Then
の意味は
「もしtargetValueが60より大きいなら」
です。
この意味の通り、「もしtargetValueが60より大きいなら」、その時だけ通る(実行される)のが次の行の
Cells(5, 2).Value = "合格"
の部分です。
次の、
Else
の部分は
「そうでないなら」
です。
つまり、targetValueが60以下であれば、その時だけ通るのが次の行の
Cells(5,2).Value = "不合格"
の部分です。
そして、
End If
の意味は、「If文はここで終わり」という意味です。マクロの終わりを示す、「End Sub」と同じような意味合いです。
これまでと大きく違うのは、
「状況によって、通る部分と通らない部分がある」
ということですね。
このように、「ある条件を満たした時だけ実行する」という処理を書きたい時に使うのがIfになります。
書き方としては
If 条件 Then
条件を満たした時に実行する処理
Else
それ以外の時に実行する処理
Endif
です。
「条件」に当てはまる内容としては、等号(=)や不等号(>,<など)を使うことが多いです。
If ○○= 100 Then
これの意味は、「もし○○が100と等しいなら」になります。
ここで気をつけなければいけないのが、この時の「=」は「代入」ではないことです。
このように、「=」は条件として書かれていると「等しい」という意味になります。
よくある条件の書き方
例えば先述したような、
「60より大きい」
というものは書き方が分かりやすいですよね。
では、「セルが空欄の場合」はどう表せば良いでしょうか。
そのような場合は以下のように書きます。
If Cells(1,1).Value = "" Then
実は、""という風に書くと、「何もないという意味の文字列」になり、「空(から)文字」と言います。
これを使うことで、「セルが空欄の場合は何かの値を代入する」というような処理が出来るようになりますね。
では逆に、「セルが空欄以外の場合」はどう表せば良いでしょうか。
もちろん、上の書き方を利用して、以下のように書くことも出来ます。
If Cells(1,1).Value = "" Then
ここに「セルが空欄の時」の処理を書く
Else
ここに「セルが空欄以外の時」の処理を書く
End If
このように、「自分が持っている知識を利用して対応する力」も、すごく大切になります。
ただ、「~以外の時」という条件はよく使うので、しっかり書き方を覚えておきましょう。
If Cells(1,1).Value <> "" Then
こう書くと、「A1セルが空文字以外の場合」という意味になります。
算数では「<>」のように不等号をくっつけて書くことは無かったので、VBAならではの表現ですよね。
他にもマクロを作っていると、
「この条件とこの条件、どちらも満たす時だけ処理したい」
という時があります。
また、「この条件とこの条件、どちらか一方でも満たす時だけ処理したい」
という時もあります。
そんな時は、「And」や「Or」を使って以下のように書きます。
If Cells(1,1).Value <> "" And Cells(1,2).Value <> "" Then
If Cells(1,1).Value <> "" Or Cells(1,2).Value <> "" Then
上の方が、「A1セルが空欄じゃなく、かつB1セルも空欄じゃない場合」。
下の方が、「A1セルが空欄じゃない、もしくはB1セルが空欄じゃない場合」です。
こんな風に、If文を使うと色々な条件を設定し、
「こういう時に処理を実行する」
「こういう時は処理をしない」
というコントロールが出来るようになります。
次回予告
さて、今回はIf文とよく出てくる条件の指定方法について解説しました。
「色々出てきて覚えきれない!」
と思ったかもしれませんが、最初のうちは、
「こんな条件で書きたいけど、どうすれば良いんだっけ」
と思えれば大丈夫です。
大事なのは、「なんかこんなこと出来た気がする」という知識の蓄積です。
それがあれば、「調べれば出てくるかも」となり、調べれば「あ、これ見たことある!これだ!」となります。
さて、次はいよいよFor文の解説を行います。
いわゆる「ループ」「繰り返し」を実現するために使用するものになります。
実はここまで解説を進めてきましたが、かなり端折っています。プログラミングをしっかり解説している人からすれば怒られそうなくらいです。
ただ、プログラミングの面白さって、このIf文とFor文を扱えるようになってからだと思うので、出来るだけ早く進めたかったんです。
そんなわけで、次のFor文を解説してからは、実際に「こんな処理を実現するにはどうする?」という練習問題を解いていただきつつ、これまであえて触れていなかった細かい部分の補完もしていきたいと思います。
解説ばっかりの記事も次で終わりですので、もう1回分だけお付き合い下さい!
今回の内容でわかりにくい、質問したい内容がある方は、以下のリンクから有料個別サポートをご利用下さい。出来るだけ迅速に、丁寧に対応致します。
次の記事はこちら