VBで始めるプログラミング

VBで始めるプログラミング
第三回 コードを書こう!!
まきはた@ナーク ’04/05/21
変数とその宣言
変数とは前回、数値などを記憶しておくものだと説明したが、その説明だけではま
だ足りない。そこで、まず変数を箱として考える。
そして、その中に入れるものとしては、
•整数
•実数
•ブール代数
変数X
•文字列
等がある。しかし、これを変数に入れるときに、問題が
起こる。それは「変数サイズ」である。入れるものに
あった箱(つまり変数)を用意しないと、箱の中に入れ
ることができないのである。
実数型
整数型
整数型
実数型
宣言
そこでプログラムに、変数名とその変数型(変数のサイズ)をあらかじめ教えておく
必要がある。つまり
変数名 「data」 は整数型として今後使うよ
変数名 「letter」は文字列型として今後使うよ
といってから変数を使うこととします。これをVBでは
Dim 変数名 as 変数型
と書きます。ではここでVBで使える変数型について説明しようと思う。
VBで使用できる変数型
変数型
表記法
サイズ(byte)
バイト型
Byte
1
0~255
ブール型
Boolean
2
True/False
整数型
Integer
2
-32768~32767
長整数型
Long
4
-2147483648~2147483647
単精度
Single
4
-3.402823E38~-1.401298E-45
倍精度
Double
8
文字列型
String
-1.79769313486232E308~
-4.94065645841247E-324
メモリがあらわせるまで。
とりあえずはピンク色の部分だけ、覚えてくれればよい。
変数の通用範囲
宣言にはどの範囲で通用するかという規則によってさらに細かく宣言できる。
宣言
プロシージャ内宣言
Dim
Static
モジュール内宣言
Dim
Private
Public
モジュールとプロシージャ
モジュール1
プロシージャ1
プロシージャ2
通用範囲と宣言
プロシージャ中にて
Dim Data1 As Integer
・ Data1はそのプロシージャ内からのみ変更可(通用する)
・ 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
ElseIf 条件式 Then
処理3
Else
処理4
End If
と書き、さまざまな条件によって処理
をわけることができる。
この部分は何個書いてもOK
END IFは忘れないよう
にしよっ
IF文②
条件式の書き方
条件式とは、A とBの二つの値を比べることを表現する。条件式を一部書いてみよう。
条件式
説明
例
もし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 …
A<B
また、この条件式を結合させてさらに複雑な条件も書くことができる。
演算子
説明
例
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
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文を終了させる