月刊プログラム!
VisualBasic For Excel

Vol_04
2001.APR.24

Presented by kouta_y
感想等は掲示板、苦情はメールへ。

にこちゃん
いやはや、書き直しは疲れる・・・。
いや、こっちの話です。


前回はプログラム三種の神器をやったわけですが、三種の神器は筆者が勝手にそう言ってるだけなので普通は言いません。
今回は三種の神器のうちの2つ。
IF文と変数について、詳しく触れたいと思います。


IF文の使い方

IF文はVBAにいくつか存在する「分岐命令」の内の1つです。
その中で最も代表的な分岐命令です。

プログラムとはCPUを動かすための命令を書くものだと以前言いました。
もちろんVBAも例外ではなく、CPUに対して命令を書いています。
実際にはちょっと違うんですが、大雑把に言えば命令を書いていることになります。

IF文(分岐命令)の場合、他とは異なりちょっと特殊な命令です。
まず分岐をさせるには、基準となるが必要です。
CPUはその式を評価し、「こっち」にするのか「そっち」を処理するのか判断して、式の結果に見合った処理を行います。

IF文の書式はこう書きます。

IfThen
  真の時の処理
Else
  偽の時の処理
End If

If 式1 Then
  式1が真の時の処理
ElseIf 式2 Then
  式1が偽で式2が真の時の処理
Else
  両式が偽の時の処理
End If

IfThen 真の時の処理 Else 偽の時の処理

「IF文」はVisualBasic系の言語では「IFステートメント」とも呼ばれています。
上の書式ではどれも「Else」「ElseIf」は省略可能です。

真とは、式の結果が0以外のことを言います。真はTrueとも書きます。
偽とは、式の結果が0のことを言います。偽はFalseとも書きます。

意外なことに手馴れたVBA使いの人でも、この事を知らない人も少なくありません。
よく見かけるのが、

If hensu <> 0 Then
  真の時の処理
Else
  偽の時の処理
End If

という書き方をしている人です。
しかしこれは

If hensu Then
  真の時の処理
Else
  偽の時の処理
End If

と書けるのです。
この方が「0と比較」するという処理をCPUが実行しないため、処理が多少速くなりますし、この方がなんとなくスマートで「プログラムらしい」気がします。(俺的に)


変数の使い方

変数というのはなかなか奥が深いものです。
しかしここでは、あまり小難しいことはやりません。
「VBAで扱う変数は実際どうやって使うのか?」
これをもとに説明していきたいと思います。


値を入れる箱

筆者が人に「変数」を説明する場合、いつも「箱」に例えます。
実際には、箱とは程遠い姿をしていますが、最初の内はこのように解釈してくれて結構です。

さて、「変数」という名をもつその「箱」は、必ず個々に名前を持っています。
人間と同じですね。その名前を変数名といいます。そのまんまです。
そしてその箱には、必ずがあります。この形はなんでも良いというわけではなく、入れたい値に見合った形をしていなくてはなりません。
それを変数のといいます。

VBAでの型の種類は、大雑把に分けて「数値型」「文字列型」とに分けることが出来ます。
もちろん他にもたくさんあります。
それはヘプルで確認してみてください。
ちなみにヘルプでは数値型と文字列型は「データ型」といって一くくりにしています。


変数を使った簡単なサンプルを作ってみましょう。

Sub TestHensu()   ' プロージャの宣言

Dim AAA As Integer   ' 整数型
Dim BBB As Single   ' 不動小数点数型
Dim CCC As String   ' 文字列型

AAA = 10       ' 整数を入れることができる
BBB = 3.1415     ' 小数点を入れることができる
CCC = "たろの部屋"  ' 文字列を入れることができる

' セルに書き込む
Cells(1, 1).Value = AAA
Cells(2, 1).Value = BBB
Cells(3, 1).Value = CCC

AAA = 3.1415     ' 小数点を入れてみる
BBB = 10       ' 整数を入れてみる
CCC = 20       ' 整数を入れてみる

' セルに書き込む
Cells(1, 2).Value = AAA
Cells(2, 2).Value = BBB
Cells(3, 2).Value = CCC

End Sub   ' プロージャの終わり


実行結果



まず最初はそれぞれの「型」に合った値を入れていますね。
セルにちゃんと表示されました。

さて、その次が問題です。
筆者先程「型に合った値を入れる」と言いました。
しかしこれは、整数に小数、小数に整数、文字列に整数とごちゃごちゃです。
AAAの値だけ「3」と丸められた以外、ちゃんと他のは表示できています。
これは何故か?
はい。これはVBAの仕様です
多少、型が違ってもVBAではエラーにはなりません。
まず、「Single型」の変数に整数を渡していますが、これはお分かりでしょう。
「10」も「10.00」もイコールですよね?

次に文字列に整数を渡していますが、ここがまたVBAの面白いところ。
この場合、整数であるべく「20」は「文字列」と見なされているのです。
ですので、ここでは整数の「20(にじゅう)」ではなく文字列の「20(にーまる)」として値を代入しています。

さて変数AAAに渡している小数点ですが、なぜ「3」となってしまったのでしょう。
まさにこれこそが「型が違うから」と説明できます。
「3.1415」という小数点を整数に丸め込んだのです。
具体的には小数点以下第一位を四捨五入し、整数として代入したんです。
これにより、「Integer型」変数AAAは、3という値を持ちました。


ちなみに、整数に文字列を渡してみてください。
文字列は整数に丸め込むことはできません。
「型が一致しません」というエラーがでるはずです。


終わり

変数とIF文について、多少分かって頂けたでしょうか。
次回は変数について更に詳しく解説したいと思います。