連載
» 2006年09月22日 00時00分 公開

基礎解説 演習方式で身につけるチェック式WSH超入門:第5回 データ型について理解を深めよう (3/5)

[牟田口大介(Microsoft MVP Visual Developer - Scripting),著]

 そのほかのデータ型として、日付(時刻)型(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つの条件の円が交わる部分を表している。

18以上30以下の範囲を示すベン図
斜線部分が2つの条件の論理積を示す。

 ここで1つ論理演算にまつわる例題を出そう。「うるう年」は1年が366日ある年のことだが、ある年がうるう年であるためには3つの条件がある。

(1)うるう年は西暦が4で割り切れる年とする。
(2)(1)のうち、100で割り切れる年は平年とする。
(3)(2)のうち、400で割り切れる年はうるう年とする。

 これを一文で書くと、うるう年とは、「『西暦が4で割り切れ、かつ100で割り切れない年』または『西暦が400で割り切れる年』」となる。この条件を論理演算子の組み合わせで表現し、任意の年がうるう年かどうかを判定するスクリプトを書いてみよう。割り切れるかどうかはMod演算子(割り算の余りを求める)を用いて0になるかどうかで判定する。

CHECK!

マーカーで隠れたところを選択してチェックしてみよう。


Option Explicit
Dim intYear, blnLeapYear
intYear = 2112 '判定したい西暦を指定
blnLeapYear = ((intYear Mod 4 = 0) And (intYear Mod 100 <> 0)) Or (intYear Mod 400 = 0)

If blnLeapYear Then
        MsgBox intYear & "年は、うるう年です。"
Else
        MsgBox intYear & "年は、うるう年ではありません。"
End If

 演算子を複雑に組み合わせるので少し難しかったかもしれないが、お分かりいただけただろうか? まず、「西暦が4で割り切れ」なのでintYear Mod 4 = 0というブール値を書く。「かつ100で割り切れない」ので、先ほどの値とintYear Mod 100 <> 0をAnd演算子で論理積を取る。「または400で割り切れる年」なので、先ほどまでで計算したブール値と、intYear Mod 400 = 0の論理和をOr演算子で取る。ベン図で描くと分かりやすいだろう。

うるう年の条件を示すベン図
赤い斜線で示した部分がうるう年を示す。

  

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。