VBで始めるプログラミング 第三回 コードを書こう!! まきはた@ナーク ’04/05/21
変数とその宣言 変数とは前回、数値などを記憶しておくものだと説明したが、その説明だけではまだ足りない。そこで、まず変数を箱として考える。 そして、その中に入れるものとしては、 整数 実数 ブール代数 文字列 変数X 等がある。しかし、これを変数に入れるときに、問題が起こる。それは「変数サイズ」である。入れるものにあった箱(つまり変数)を用意しないと、箱の中に入れることができないのである。 実数型 実数型 整数型 整数型
変数名 「data」 は整数型として今後使うよ 変数名 「letter」は文字列型として今後使うよ 宣言 そこでプログラムに、変数名とその変数型(変数のサイズ)をあらかじめ教えておく必要がある。つまり 変数名 「data」 は整数型として今後使うよ 変数名 「letter」は文字列型として今後使うよ といってから変数を使うこととします。これをVBでは Dim 変数名 as 変数型 と書きます。ではここでVBで使える変数型について説明しようと思う。
VBで使用できる変数型 とりあえずはピンク色の部分だけ、覚えてくれればよい。 変数型 表記法 サイズ(byte) バイト型 Byte 1 0~255 ブール型 Boolean 2 True/False 整数型 Integer -32768~32767 長整数型 Long 4 -2147483648~2147483647 単精度 Single -3.402823E38~-1.401298E-45 倍精度 Double 8 -1.79769313486232E308~ -4.94065645841247E-324 文字列型 String メモリがあらわせるまで。 とりあえずはピンク色の部分だけ、覚えてくれればよい。
変数の通用範囲 宣言にはどの範囲で通用するかという規則によってさらに細かく宣言できる。 宣言 プロシージャ内宣言 モジュール内宣言 Dim Static Private Public
モジュールとプロシージャ モジュール1 プロシージャ1 プロシージャ2
通用範囲と宣言 プロシージャ中にて Dim Data1 As Integer ・ Data1はそのプロシージャ内からのみ変更可(通用する) Static Data1 As Integer ・ Data1はそのプロシージャ内からのみ変更可(通用する) ・ Data1はそのプロシージャが実行されていないときも(アプリが終了するまで)ずっと値を保持する。 モジュール中にて Dim Data1 As Integer Private Data1 As Integer ・ Data1はそのモジュール内(のすべてのプロシージャ)からのみ変更可(通用する) *DimとPrivateは等しい。「Private」であることを強く表すためにこうなった。 Public Data1 As Integer ・ Data1は他のモジュール内(のすべてのプロシージャ)で有効 ・ Data1はアプリケーション内のすべてのプロシージャで使用できる関数になる
配列 配列とは、変数を数珠のようにいっぱい並べたものをさします。変数名の節約になるだけでなく、 A(0) A(1) A(2) A(3) A(4) A(5) 配列とは、変数を数珠のようにいっぱい並べたものをさします。変数名の節約になるだけでなく、 「A()」の括弧の中を変数にすることにより、名前ではなく変数で保存先を変更できる。 VBでは、配列は以下のように宣言します。 Dim Data(10) As Integer こうすると、Data(0)からData(10)までの11個の要素を持つInteger配列ができます。
ユーザー定義型(構造体) ユーザー定義型とは、いくつかの基本データ型を組み合わせて、ユーザーが独自のデータ型を作成することができる。 ENEMY ユーザ定義型 POSX 整数型 POSY 整数型 EXIST ブール型 Type ENEMY POSX As Integer POSY As Integer EXIST As Boolean End Type 定義部(標準モジュール内) Dim boss As ENEMY Boss.POSX = 100 Boss.POSY = 200 プロシージャ内で実際に利用する例 わざわざ、複雑にしているように見えるが、もし構造体を用いないで書いたら、どうなるか。 Dim BOSSPOSX As Integer Dim BOSSPOSY As Integer Dim BOSSEXIST As Boolean Dim SUBCHARAPOSX As Integer Dim SUBCHARAPOSY As Integer Dim SUBCHARAEXIST As Boolean Dim Boss As ENEMY Dim Subchara As ENEMY ユーザー定義型の定義部分は「標準モジュール」の中に記述する
VBの制御文! 制御文とはプログラムの流れを制御する文!そのままである。
IF文① IF文とは、「もし~~~だったらこっちの処理、そうじゃなかったらこっちの処理」という分岐を行ってくれる制御文である。 IF 条件式 Then 処理1 Else 処理2 End If 書き方としてはこうである。「条件式」を満たしていれば「処理1」を、その他の場合は処理2を実行するプログラムが書ける。また、これの拡張として、 と書き、さまざまな条件によって処理をわけることができる。 IF 条件式 Then 処理1 ElseIf 条件式 Then 処理2 処理3 Else 処理4 End If この部分は何個書いてもOK END IFは忘れないようにしよっ
IF文② 条件式の書き方 条件式とは、A とBの二つの値を比べることを表現する。条件式を一部書いてみよう。 条件式 説明 例 IF A < 0 Then … A <= B もしAがB未満だったら IF A <= count Then … A > B もしAがBよりより大きかったら IF input > 100 Then … A >= B もしAがB以上だったら IF current >= max Then … A <> B もしAとBが等しくなかったら IF password <> “keisanpass” Then … A = B もしAとBが等しかったら IF counter = 9999 Then … また、この条件式を結合させてさらに複雑な条件も書くことができる。 演算子 説明 例 NOT 否定 IF NOT A < B Then … AND 論理積(かつ) IF A > 0 AND A < 999 Then OR 論理和(または) IF A < 0 OR B < 0 Then
IF文③ 例)TEXTBOXにパスワードを入れて、ボタンをおしたときに、特定のパスワード(hogehoge)と一致すれば終了、間違っていたら、MSGBOXで警告をするプログラム Private Sub Command1_Click() IF TextBox1.Text = “hogehoge” Then End Else MsgBox(“パスワードが違います!!”) End IF End Sub
FOR文 FOR文は繰り返し処理をする制御文です。ではまず文法を書いて見ましょ FOR ループ変数 = 初期値 TO 最終値 処理 NEXT ループ変数とは、繰り返す回数をコントロールする変数です。たとえば、ループ変数を初期値1、最終値100にしておけば100回クルクルッと繰り返して、ループを抜ける、というような動きをします。 例)1から10までの整数を全部たした値を表示する Dim i As Integer Dim answer As Integer Answer = 0 For I = 1 TO 10 answer = answer + I Next TextBox1.Text = answer
WHILE-WEND文 これも繰り返し制御文です。書式は While 条件式 処理 Wend となっていてIFの時と同様、条件式を使います。そして、その条件式が満たされるまで、処理は繰り返されます。
繰り返しについて 細かい話をすると、繰り返しといっても、いつ条件式を読むかによって変わってきます。 NO 処理 YES NO 処理 YES 条件式をみたしているか? NO 処理 YES 条件式をみたしているか? NO 処理 YES FOR文、WHILE文などは左がわの形式です。よほどのことがない限り、どちらかに統一したほうが最初は良いと思います。
SELECT CASE文 では、もし分岐が10個も20個もあったとすると、IF文で書くと少しわかりにくい。そこで、すっきりした多方向分岐文として「Select Case文」があります。 Select Case 変数 Case 値1 処理1 Case 値2 処理2 Case 値3 処理3 Case Else 処理4 End Select たとえば、入力系でこれを使うと便利。押されたキーにより処理をわける場合、このように記述したほうがすっきりしてよい^^
EXIT 文 とEND文 EXIT文はプロシージャやループ制御から抜けるときに使う。 EXIT FOR FOR文から抜ける EXIT SUB サブプロシージャから抜ける END文とは、なにかを「終了」させるものですが、終了させるものごとにいろいろあります END プログラムそのものを終了させる END IF IF文を終了させる