VBA超入門シリーズ:その8 ~変数の型・オブジェクト型~

 

今回は条件分岐についてまとめます。 プログラムを勉強すると比較的最初に学習するイメージですね。

それでは条件分岐やっていきましょう!

条件分岐(if)

条件式の結果によって処理を分ける仕組みが条件分岐です。
1つの条件式の結果により、正しかったらこの処理、違ったら別の処理などの処理を分けるときに「if」を使います。

 

構文は以下

If 条件式 Then
(条件式がTrueの時に行う処理 1)
(条件式がTrueの時に行う処理 2)
End If

「if」~「End if」で囲い、間に条件式を記述します。

 

上記はTrue時の処理を記述できます。処理は複数記述可能です。

Falseのとき、条件式に満たないときの処理をさせたいときは、「Else」を使用してそのあとに処理を記述します。

 

構文は以下

If 条件式 Then
    (条件式がTrueの時に行う処理)

Else
    (条件式がFalseの時に行う処理)

End If

複数の条件分岐(ElseIf)

「if」~「End if」だと条件式は一つしか使えません。
2つ目の条件式を使いたい場合は「ElseIf」を使います。

 

構文は以下

If 条件式 Then
    (条件式1がTrueの時に行う処理)

ElseIf 条件式2 Then
    (条件式2がTureの時に行う処理)

Else
    (どちらも当てはまらないときの処理)

End If

複数の条件分岐(select)

if文以外にもselect文があるので紹介だけします。
詳しく知りたい方は調べてみてください。

 

構文は以下


Select Case 比較対象
Case 条件式1
    (条件式1がTrueの時に行う処理)

Case 条件式2
    (条件式2がTrueの時に行う処理)

Case 条件式3
    (条件式3がTrueの時に行う処理)

Case Else
    (どの条件式もFalseの時に行う処理)

End Select

「ElseIf」とほぼ同じ。 select文は比較対象が一つあり、その値に対する複数の条件式を「Case」のあとに記述します。 例のごとく「Case Else」はなくても大丈夫です。

selectの使いどころとしては分岐の数が多いときに使用します。

 

 

条件式

演算子を使い数値の大きさを比較したり、文字列がほかの文字列と同じかどうかなど判断します。

 

比較演算子の結果は”True”又は”False”で返されます。

演算子についてはこちらで → VBA超入門シリーズ:その7 ~演算子~

 

サンプル

サンプルで遊びましょう。

 

まずは変数aの値が10より大きい場合にセルに「大きい」と表示させます。

Sub サンプル1()
  Dim a As Integer

  a = 12

    If a > 10 Then
        Range("A1").Value = "大きい"
    End If

End Sub

上記の条件式は「a > 10」になります。
変数aには12を格納しているので、条件式は「True」を返します。
処理が実行されるのでセル「A1」に「大きい」と表示されます。

 

仮に、変数aに8を格納すると条件式では「False」を返すので処理は実行されません。

 

 

次は、変数aが10よりも小さいときは「小さい」と表示出るようにします。

Sub サンプル2()
  Dim a As Integer

  a = 12

    If a > 10 Then
        Range("A1").Value = "大きい"
    Else
        Range("A1").Value = "小さい"
    End If

End Sub

変数aに8を格納して実行してみます。

 

おしまい

 

 

 

遊んでみましょう

ちょっと遊んでみようと思います。過去記事で学んだこと使ってみましょう!ちょっとした復習です。

VBA内で変数を格納しましたが、オブジェクト型をやったのでセルのデータを使ってみたいと思います。

 

Excelの「A1」の数字と「C1」の数字を比べた結果を別のセルに表示させます。

 

Dim a, c As Range
 Set a = Range("A1")
 Set c = Range("C1")

まずは変数を宣言しそれぞれにセルを格納します。

 

条件式は「a>c」にします。
True処理は「aはcより大きい」とセルに表示させます。
ただ「a、c」はVBAで宣言した変数なのでExcel側で「aはcより。。」と表示させてもわからないので、実行時には格納したセルの数字を表示させます。

 

そうするとセルに表示させる部分ですが、文字と変数(数字)が混ざってしまいます。
全部を「””」で囲ってしまうと「a、c」が文字として認識されます。
文字と変数の中身を結合し、一文にするにはアンパサンド「&」を使います。

If a > c Then
  Range("A3").Value = a & "は" & c & "より大きい"
End If

 

 

文字列のみの結合にはプラス「+」も一応使えますが、正確には結合ではなくただの足し算として処理されるのでエラーになることがあります。
数字を文字列として使う際はダブルクォーテーション「””」で挟みつつ、なるべくアンパサンド「&」を使いましょう。

 

 

False側も何か入れようか思いましたが、とりあえずデータの削除(ClearContentsメソッド)を入れます。

 

Else
  Range("A3").ClearContents

 

 

以上繋げるとこんな感じです。

Sub 遊び()
Dim a, c As Range

 Set a = Range("A1")
 Set c = Range("C1")

If a > c Then
  Range("A3").Value = a & "は" & c & "より大きい"

Else
  Range("A3").ClearContents

End If

End Sub

これでVBEで編集せずにセルA1とC1に数字をいれてマクロを実行するだけで結果を返してくれる! はず、、、

 

できましたね!!

 

A1の数字を変えてみます。

 

できたぁぁぁ!

これだけですけど何度か失敗して時間かかりました・・・。

 

 

 

次回はループ処理についてまとめます。
めんどくさい反復作業を自動で処理してくれるとても素晴らしい機能です。

 

「VBA超入門シリーズ:その10 ~ループ処理~」に続く