そのほかのデータ型として、日付(時刻)型(Date)、文字列型(String)、ブール型(Boolean)、エラー型(Error)、オブジェクト型(Object)がある。このうち、エラー型については、VBScriptで用いることはほとんどないと思われるので割愛する。また、オブジェクト型については、後の回で詳しく説明するのでここでは省略する。日付型と文字列型については、連載第4回「4.日付処理関数を使いこなす」でそれらを扱う関数とともに使用例を紹介した。残る型としてはブール型があるが、これは今回初登場なのでこれから解説する。
ブール型とは、True(真)かFalse(偽)かのどちらかを格納する最も単純なデータ型である。二者択一の情報を格納するときに用いられる。例えば、後述するIs〜といった関数の戻り値はブール型である。
実は、ブール型の値は比較演算子を使うときにも扱っている。第3回「3.WSHで条件分岐処理をする」で登場したコードを一部修正して再掲する。
Option Explicit
Dim intX, intY
intX = 5
intY = 3
If intX > intY Then
MsgBox intX & "は" & intY & "より大きい。"
Else
MsgBox intX & "は" & intY & "以下だ。"
End If
このようなコードは、ブール値を扱っていることを明確にすると、次のように書き換えられる。なお、コードの後半に変数の内容と型を表示するコードを追加している。
Option Explicit
Dim intX, intY, blnCondition
intX = 5
intY = 3
blnCondition = intX > intY
If blnCondition Then
MsgBox intX & "は" & intY & "より大きい。"
Else
MsgBox intX & "は" & intY & "以下だ。"
End If
MsgBox "変数名:blnCondition " & vbCrLf & _
"値:" & blnCondition & vbCrLf & _
"型:" & TypeName(blnCondition)
If〜Then〜ElseステートメントではIfの後に条件を書くが、それがブール型のTrueならThenの後が実行されるということである。Falseの場合はElse以下が実行される。intXとintYの値を入れ替えて試してもらいたい。なお、If blnCondition = True Thenと記述しても同じことである。Trueであることを強調したい場合はこちらの記述をするのがよい。
ブール型は「条件Aまたは条件B」や「条件Aかつ条件B」や「条件Aでない」などを表すのに便利である。これらを「論理演算」といい、論理演算を行う演算子を論理演算子という。例えば、「18以上、30以下」という数値の範囲を表すには、「条件Aかつ条件B」(条件Aと条件Bの論理積)を意味するAnd演算子を用いる。次の例ではIf〜Then〜Elseステートメント中でAnd演算子を用いている。
Option Explicit
Dim intX
intX = 28
If intX >= 18 And intX <= 30 Then
MsgBox intX & "は、18以上30以下です。"
Else
MsgBox intX & "は、18未満か、30より大きいです。"
End If
これは、intX >= 18(18以上)というブール型の条件Aと、intX <= 30(30以下)というブール型の条件Bの論理積を求めている。結果はやはりブール型で返され、範囲内だとTrueを返す。
ほかによく用いる演算子としては、「条件Aまたは条件B」を表す論理和(Or演算子)、「条件Aでない」を表す論理否定(Not演算子)がある。これらの論理演算子は数値演算子と同様、( )を用いたりして組み合わせて利用することが可能である。
論理演算は下図のような「ベン図」を用いると分かりやすい。論理積は2つの条件の円が交わる部分を表している。
ここで1つ論理演算にまつわる例題を出そう。「うるう年」は1年が366日ある年のことだが、ある年がうるう年であるためには3つの条件がある。
(1)うるう年は西暦が4で割り切れる年とする。
(2)(1)のうち、100で割り切れる年は平年とする。
(3)(2)のうち、400で割り切れる年はうるう年とする。
これを一文で書くと、うるう年とは、「『西暦が4で割り切れ、かつ100で割り切れない年』または『西暦が400で割り切れる年』」となる。この条件を論理演算子の組み合わせで表現し、任意の年がうるう年かどうかを判定するスクリプトを書いてみよう。割り切れるかどうかはMod演算子(割り算の余りを求める)を用いて0になるかどうかで判定する。
演算子を複雑に組み合わせるので少し難しかったかもしれないが、お分かりいただけただろうか? まず、「西暦が4で割り切れ」なのでintYear Mod 4 = 0というブール値を書く。「かつ100で割り切れない」ので、先ほどの値とintYear Mod 100 <> 0をAnd演算子で論理積を取る。「または400で割り切れる年」なので、先ほどまでで計算したブール値と、intYear Mod 400 = 0の論理和をOr演算子で取る。ベン図で描くと分かりやすいだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.