2016年6月8日水曜日

【VBAリファレンス】もし、If文を使うなら…True、使わないならFalse

さて、前回のForステートメントに続き
今回はIfステートメントをご紹介します。

Forステートメントの記事はこちら。
【VBAリファレンス】For文を理解してフォアフォアしてみよう。


一般的な事務や、データ解析、操作系の仕事をされているのであれば
For文と、If文をマスターしていれば
大体のことは出来るのではないでしょうか。

ちょっと大げさかもしれませんが
そこから派生した疑問などは
大体Webを見ると解決したりするものです。


つまり、基本をしっかり!マスターしていれば
あとはGoogle先生が教えてくれるものです。

実際に私も、Ifは理屈的に理解していましたが
For文の理解度を高めた事で、二段飛ばしくらいあれをあれしたものです。


それではIf文の基本的な説明ですが
原理はこうです。
もし○○が□□だったら、▲する
そうじゃなければ△△する。

または
もし○○が□□だったら、▲する
それか、◇だったら、☆☆する。※1
そうじゃなければ△△する。
※1 それか、◇◇じゃなければ、☆☆するは何回も重ねられます。


If文はFor文と違って上から下に流れて終わります。

その際にとある条件に一致しているかしていないか、のどちらかで
処理内容が変わる、条件分岐、分かれ道方式になります。
またその条件は柔軟に変動が可能です。


その時の答えとして
そうだ!って時はTrue、違う!って時は、Falseに置き換えたうえで
処理が進められます。

それでは、さっそく基本文を書いてみます。
-------------------------------
Sub test()

If Range("A1") = "1" Then
    Range("B1").Value = "男"
End If

End Sub
-------------------------------
これは、セルのA1に1が入力されていた場合
その隣のB1のセルに男と入れるIf文です。

1以外の文字列、もしくは何も入ってなかったら
何も起きません。
If Range("A1") = "1" Then → もしセルのA1に1が入っていたら
Range("B1").Value = "男" → B1に男と入れてね。
ですね。

つまり、1以外の時は End Ifに飛んで、このコードは終わります。



次に、1以外のデータが入っていたときは
B1に女と入れるコードを書きたい時、
Else(エルス)を使用します。
-------------------------------
Sub test()

If Range("A1") = "1" Then
    Range("B1").Value = "男"
    Else
    Range("B1").Value = "女"
End If

End Sub
-------------------------------
セルのA1に1以外のデータ(空欄含む)が入っている場合は
セルのB1に女が入力されます。


つまり、1以外どんな状態でも女と入るわけです。
これではちょっと雑だな~って時は
さらにElse If(エルスイフ)を使用します。

-------------------------------
Sub test()

If Range("A1") = "1" Then
    Range("B1").Value = "男"
    ElseIf Range("A1") = "2" Then
    Range("B1").Value = "女"
    Else
    Range("B1").Value = "エラーです"
End If

End Sub
-------------------------------
これは、セルのA1に1と入っていた場合はB1に男と入力され
2と入力されていた場合はB1に女と入力され
それ以外のデータだった場合は、B1にエラーですと返すコードです。
この時点で、条件分岐は3つに分かれるわけです。

このElseIfはいくつも連結が可能ですが
最後は必ずElseをつけて終わりに導いてください。
Elseで特に指定したい条件がない場合は
Else以降何も書かなくてよいです。

そして、条件は必ずしもイコール(一致)だけというわけではありません。
○○より大きい
○○以上
○○より小さい
○○以下
○○と等しい(今まで使っていたイコールです)
○○と等しくない
の主に6種類あり、
それを比較演算子といいます。
意味さえ知っていれば、特に言葉を覚えなくてもいいです。

比較演算子の記号は以下の通りです。
○○< →○○より大きい
○○≦ →○○以上
○○> →○○より小さい
○○≧ →○○以下
○○= →○○と等しい(今まで使っていたイコールです)
○○<> →○○と等しくない
となります。

やはり使う頻度が多いのは、<、>、=、<>の4つが多いでしょうか。
<や>は使い方を誤ると、えらい方向にはまりがちなので
ぜひぜひご注意ください。

先ほど【条件は柔軟に変動が可能です】と記載をしましたが
私が普段使用しているIfの条件サンプルを記述してみたいと思いますので
ご参考頂ければ幸いです。

その1
-------------------------------
Sub test1()

If Range("A1") = "" Then
Range("A1").Value = "○"
ElseIf Range("A1") = "○" Then
Range("A1").ClearContents
Else
End If

End Sub
-------------------------------
その1は完全な2択です。
何も入っていなければ○を入れる、○が入っていたら消すの繰り返しです。
これをたくさん作って、それぞれコントロールフォームのボタンに
当て込めば、チェック表のようなものが作れます。
※コントロールフォームの使用方法は後日ご案内いたします。


その2
-------------------------------
Sub test()

Dim i, a, b As Long

For i = 1 To 10
    If Cells(i, 1) <> "" Then
    a = Cells(i, 1)
    b = a * 1.08
    Cells(i, 1).Value = b
    Else
    End If
Next i

End Sub
-------------------------------
その2はA列の1から10に
税抜きの金額が入っていると仮定してください。
ただし、その中には何も入っていないセルもある場合、
そのセルは飛ばします。

先日の記事のFor文を使用します。
カウントの変数はiになります。
で、そのカウントをCellsプロパティに当て込みながら
セルのA1からA10までを指示するFor文を作ります。

一旦、指定したセルに値が入っていないかを確認するため
If文を使い、ダブルクォーテーション2つ""(何も入っていない)という条件を記載し
その条件に当てはまらない<>をクリアした場合、
選択しているセルの値を一旦変数aの箱に代入します。
その変数aに消費税1.08をかけた値をさらに変数bの箱に代入します。
その変数bの値を選択中のセルに上書きすることで
自動で課税金額に上書きすることが出来ます。
例えばとなりのセルに課税した金額を記載したい場合は
Cells(i, 1).Value = bをCells(i, 2).Value = bに変えればOKです。


ちょっとここでは書ききれないので、
色々なサンプルは後日ご案内しますね。

0 件のコメント:

コメントを投稿