Last Update : 1999/10/10 04:32
SHIROのVB講座
『超』初心者編 第3日目
昨日は、テキストボックスなどのコントロールにある『プロパティー』を代入文で少しいじってみた。
今日は、『変数』という便利な記憶する箱を使って、どんなことが出来るかを試そう。
実のところ、昨日のプロパティーの考え方が解ってしまっていれば、『変数』を扱うことは出来てしまっているも同然だ。
プロパティーに代入しているのを、変数に代入すれば良いだけだからだ。
ただし、変数は、どのように使うかを定義する必要がある。プロパティーは、既にVB内部で『型』というものを定義しているので、改めて定義する必要が無いだけだ。変数はユーザで定義してあげよう。
実際には変数は定義しなくとも使えてしまうが、定義しないまま使っていると、変数の綴りミスでもエラーが発生せず、なんで動かないのか全然わからなくなってしまうという恐れがあるので、必ず『変数を定義しなくては使えない状態』にしておくことをお奨めする。(・・・と、多くの経験者は語っている。)
というわけで、ここで『変数を定義しなくては使えない状態』を設定する方法を紹介しよう。
以下のように、VBエディタのオプションから『変数の宣言を強制する』をチェックすればよい。
↓
筆者は、自動構文チェックを外してしまっているが、これは初心者にとって非常に強力で頼もしい機能だ。不適切な文法を検出すると、警告してくれるからだ(もちろん全ての文法エラーが検出できるわけではないのだが。一部の文法エラーは実行するまでわからないこともある)。場合によっては記述すべき記号などの候補を提示してくれるので、コーディングの効率が向上し大変助かる。VB言語の先生が常に隣にいるのと同じなのだ。VBコード記述が慣れないうちは、この項目にチェックを入れておくことをお奨めする(デフォルトでチェックが入っていると思うが)。言語に慣れてくると、逆にこの機能がうざったく感じてくるようになる。こうなれば、もうVB中級者だ。このチェックを外すことが出来るように頑張ろう。
変数を定義する方法は以下の代表的な型を覚えてしまおう。『型』とは変数が記憶できるものとでも言えば良いだろうか。簡単な約束事のことなのだが。ちなみに下の表は、上からよく使う順番に並べてある。
型の名称 | 意味 | コード記述例 |
---|---|---|
String | 文字 | txtMessageA = "こんにちは" |
Long ・ Integer | 数値(整数) | lngCounterB = 100 |
Single | 数値(小数可) | sglWeightC = 65.3 |
Date | 日付・時刻 | datToday = #1999/10/04# |
「数値」は、「数字」では無い事に注意しよう。数値は、足し算・掛け算などの演算が行える。しかし、基本的に『数字』は、コンピュータは文字として取り扱うのだ。数値で「1 + 1」の結果は「2」だが、文字列(数字)で『"1"+"1"』の結果は、なんと「"11"」だぞ。文字列をプログラムのソースコードに直接書く場合には、「"」(ダブルクォーテーションと読む)で括る。
ここで挙げた型以外に、VBではたくさんの種類が用意されている。必要に応じて使い分ける訳だが、あまりに種類が多すぎて覚えきれないのが現実だろう。そういう場合には、ヘルプなどを見ながら必要になったときにだけ使うと良いのだ。型の場合に限らず、VBのヘルプはなかなか便利である。何かわからなくなったら、すぐに使えるように、ヘルプ呼び出しの操作に慣れておこう。この操作に慣れてしまえば、VBで解らなくなっても怖いことは無くなってしまうのだから。
では早速、どんな型が用意されているのか、ヘルプの操作学習も兼ねて確認してみよう。(興味本位で結構。(笑))
コード上で、変数を宣言するのは、Dim文を使う。だから、変数の型の解説は、Dim文のヘルプを見れば載ってそうだ。コード上の適当なところに、『Dim』と打ち込もう。そのDimの文字を選択するか、Dimの文字の先頭にテキストカーソルを持ってきて、F1キーを押してみる。Dim文のヘルプが表示されただろうか。
ヘルプ呼び出しを頻繁にかつ気軽に行うためのコツは、なんと言ってもこの『F1キーのみのオペレーションで、関連情報を得る』ことだろう。英語の辞書を引くのが速くなれば、それだけ英語学習の上達が早くなるのと同じで、気軽にヘルプを呼び出せれば、それだけヘルプの表示を読むことに慣れるのが早くなるし、ひいてはVBの学習も早くなるのだ。
このようなヘルプは、VBのみのものではないので、操作自体は慣れているだろうが、表示内容を読むためには、それなりのコツが必要だ。例えば、構文を解説している個所では、” [ ” や ” ] ”の記号は『省略可能』を意味していたり、「指定項目と表示されている斜体英小文字のものは、構文の表示の同じ個所で置き換える」などだ。他にもある。ちょっと考えれば解るようではあるのだが、やはりある程度の慣れが必要だろう。
では実際にコードを書いてみよう。今日まで習ったことを思い浮かべながら、「コマンドボタン」と「テキストボックス」をフォームに貼り付ける。コマンドボタンのNameプロパティーは『Command1』、テキストボックスのNameプロパティーが『Text1』であることを確認しよう。
ちなみに、もし名前が違うなら、既に同じ名前で貼り付けてあるかもしれない。フォームの大きさを変えてしまったことがあれば、見えない位置に存在するかもしれない。参考までに、行方不明になってしまったコントロールを探してみるという手もあるので紹介しておく。
プロパティーウィンドウという。これをもし消してしまったらF4キーを押せば再び出現する。このウィンドウの一番上にあるのが、フォームに含まれるコントロールをすべて列挙してくれるコンボボックスだ。コントロールを選択すると、フォーム上のコントロールが選択された状態になる。
上の例では、思わず巨大なボタンを作ってしまい、テキストボックスが隠れてしまった場合だ。(ここでは便宜上、ちらっと横から見えてはいるのだが・・・。(笑))
こんな場合でも、プロパティーウィンドを使えば、例えば、せっかくフォームの中央ピッタリに配置したコマンドボタンを動かすことなくテキストボックスを選択可能だ。他のコントロールの下になって隠れて見えない場合でも、選択していることを示す四角い表示が見えるはず。この四角い表示の真上でクリックして、ctrlキーを押しながらカーソルキーを押せばコントロールを移動させることができる。または、この四角い表示の真上で右クリックし『最前面へ移動』を選択すれば、姿が現れる。
貼り付けたボタンをダブルクリックして、以下のコードを書いてみよう。
Private Sub
Command1_Click() Dim xText As String xText =
"今日は" & Date
& "日です。" End Sub |
また、変数に代入文を使って『型』が違うものを代入したときには、VBが型を自動的に変換してくれるから便利だ(これはVBの大きな特徴のひとつ)。しかし逆に、小数点まで値を代入しているのに、なぜか整数までしか結果が得られない・・・などの意図しない結果になってしまう場合もあるので要注意だ。コーディングの際には型を、常に意識するように心がけよう。
まず、Dim文を使って『xText』という名前で、変数を定義している。上の表を見れば「文字型の変数」として宣言していることがわかる。上のコードでは、『Date関数』という「今日の日付が入っているシステムの変数」を使っている。得られる型は実は日付型なのだが、VBでは文字定数と気軽にくっつけて使用することが出来る。
当講座では、変数名は『x』(小文字のエックス)で始めるように定義している。内部で定義されたシステム変数・関数・各コントロールと区別する際に便利だからだ。しかし、一般的な変数の命名法は、マイクロソフトが推奨している方法もあるので、そちらも是非参考にすると良いだろう。
では他にもいろいろなコードを書いてみよう。下の例を実行するには、テキストボックスをたくさん貼り付けておこう(Text1〜Text8)。Text8は多少大きくしておくのがミソである。
Private Sub
Command1_Click() Dim xHensu1 As String End Sub |
解説をすると、以下のようになる。
まず「xHensu1」〜「xHensu8」という変数名でそれぞれの型で定義している。
xHensu1は先ほどの例と同じだ。
xHensu3・xHensu5・xHensu6は6個の数の平均値を、それぞれ整数・浮動小数(単精度)・浮動小数(倍精度)で求めている。
xHensu7は、面白いかもしれない。現在の日付・時刻に0.5を足して、12時間後の日付・時刻を得ている。日付型は、実は内部で数値として扱われていて、整数部は1899年12月30日からの通算日、小数部は1日を1として時刻を表現している(1時間=1/24≒0.04167)。
例えばxHensu7を以下のように変えると、どのように表示されるだろうか?
xHensu7
= 36438.04167 Text7 = xHensu7 |
実行結果から『36438.04167』は、1999年10月5日午前1時頃を表していることがわかる。このことから、日付型同士を引き算することで、この法則による数値表現での差を求めることが出来るので覚えておこう。
最後に、xHensu8だが、そのまま実行しても改行されずに変な「・・」という記号が表示されるだけだろう。ラベルコントロールならそのまま代入しても改行されるのだが、テキストボックスの場合には、プロパティーを変更する必要がある。(ちなみにこの操作は、変数の学習とは直接関係無い。あくまでもコントロール側の設定を変更するだけ。表示上の問題だけを解決している。)
テキストボックスコントロールの『MultiLineプロパティー』を変更する。Falseになっていたら「True」に変更しよう。このプロパティーをTrueにすることによって、改行コードが認識されるようになる。
そして再度実行すると、今度はどうだろうか。ちゃんと改行されただろうか?
ラベルなどに表示する文章やメッセージなどの中に『vbCrLf』という定数を加えておくと、任意の位置で改行が出来るようになるので、覚えておくと便利だろう。
今日のまとめ: