第3章 VBScript入門
3.1 変数
■変数の概念
まず、リスト3.1のASPファイルを作成し、仮想ディレクトリ"/asp/2/"へ保存し、アクセスしてみましょう。
リスト3.1
01 <%@ LANGUAGE="VBScript" %>
02 <HTML>
03 <HEAD>
04 <TITLE>var1.asp</TITLE>
05 </HEAD>
06 <BODY>
07 <%
08 x = 10
09 %>
10 x = <%=x%> <BR>
11 </BODY>
12 </HTML>
アクセスした結果は、図3.1のようになります。

図3.1
リスト3.1の08行目の
08 x = 10
は、「数値10を変数xに代入する」という意味です。「xは10に等しい」という意味ではありません。10行目の
10 x = <%=x%> <BR>
は、「変数xの値を、文字列"x ="の後にブラウザに送信しなさい、つまり、表示しなさい」という意味です。ということで、ここでは「変数」の概念を学びます。
一般にコンピュータでは、数値や文字列などのデータを処理します。そのときデータを保存しておく必要があります。データを保存する場所のことを変数といいます。
【メモ】
現在のコンピュータは、蓄積プログラム方式という方法で制御されています。図3.2に示すように、コンピュータの中枢部は大きくCPU(Central Processing Unit)とメインメモリからなります。CPUは人間が指示した命令を解読し、いろんな処理を行う部分です。
そのCPUへの命令をあらかじめ順序立てて記述しメインメモリに保存しておき、順次読み出して実行する方式を蓄積プログラム方式といいます。あらかじめ順序立てて記述された命令の集まりがプログラムです。コンピュータで処理をする場合の対象がデータになります。このデータもメインメモリに蓄積されます。つまりメインメモリにはプログラムとデータがおのおの蓄積(保存)されます。
メインメモリには○○○○番地というようにアドレスが付与され管理されます。図では、○○○○番地からプログラム領域でプログラムが保存され、△△△△番地からがデータ領域でデータが保存されます。
CPUにはアドレス管理部があり、○○○○番地からプログラムを実行します。つまり、プログラムを1行づつ命令解読部に読みこんで、どんな処理をすべきか解読し、演算器を制御します。必要に応じてデータ領域からデータを読み出し、レジスタに渡します。処理が終わると処理結果のデータをまたデータ領域に保存し、次の行のプログラムの実行に移ります。
図3.2
変数の実態は、図3.2のメインメモリ内のデータ領域のあるメモリ番地になるのですが、メモリ番地で制御するのは人間にはわかりにくいので名前をつけます。それが変数名です。たとえば、リスト3.1の"x"です。一般には「変数x」と呼びます。
■代入文
変数はそれだけでは、単にデータを保存するメモリ上の器にすぎません。具体的な処理をするには、変数に値を設定する必要があります。つまりメモリ上の器にある値を書きこむ必要があります。この処理のことを「変数への値の代入」といいます。この処理を行うのがプログラムの基本である代入文です。代入文は以下の書式になります。なお、VBScriptでは、プログラムのことをスクリプトとも言います。
変数 = 式
ここで、式とは、値あるいは値と後に述べる演算子や関数などの組み合わせです。つまり、「式を処理した結果を変数に代入しなさい」という意味になります。
■変数型
コンピュータで扱うデータにはいろいろなものがあります。たとえば、数値、文字列、日付、論理値などです。数値はさらに整数、実数などに分類されます。コンピュータでは、これらおのおののデータに最適な保存形式があります。これをデータの型といいます。整数型、文字列型、日付型などです。このようなデータを保存する変数にも同様に変数型があります。つまり整数型のデータを保存するには整数型の変数を準備します。
【メモ】
整数型と文字列型の場合の代入文の例とその結果の各変数のデータ保存形式の例を図3.3に示します。
図3.3
■整数型
-32768〜32767の整数値を扱います。これ以上の大きな整数値を扱う場合は長整数型を使用します。代入文では、そのまま10進数の数値を記述します。
(例) x = 10
■文字列型
任意の長さの文字列を扱います。半角文字と全角文字の両方を扱えます。代入文では文字列の両端を(")(ダブルクォーテーション)で囲みます。
(例) x = "今日は"
y = "hello"
z = "10"
3番目の例は10を数値ではなく文字列として扱うことを意味しています。
【注意】
文字列では必ず両端を(")(ダブルクォーテーション)で囲みます。
y = "hello"
もし、(")を忘れて、
y = hello
と記述しますと、文字列"hello"でなく、変数helloの値を変数yに代入しなさいという全く違う意味になってしまいます。
■時刻型
日付や時刻を扱います。代入文では両端を"#"(シャープ)で囲みます。年月日は、
date1 = #yy/mm/dd#
のように記述します。yyは西暦年の下2桁です。2000年は"00"とします。mmは月です。ddは日です。このような表現を日付リテラルといいます。
時刻は、
time1 = #hh:mm:ss#
と記述します。hhは時、mmは分、ssは秒をおのおの表します。
(例) date1 = #00/07/31#
time1 = #10:46:32#
【注意】
日付リテラルは日本のコンピュータの場合は一般に#yy/mm/dd#という順番ですが、世界中どこでもこの順番とは限りません。たとえば、一般に米国では#mm/dd/yy#という順番です。後に述べますようにデータベースで日付を扱う場合にこのことを意識することが必要になります。
■スクリプト例
実際のスクリプトで変数を使ってみましょう。リスト3.2のASPファイルを作成し、アクセスしてみます。
リスト3.2
01 <%@ LANGUAGE="VBScript" %>
02 <HTML>
03 <HEAD>
04 <TITLE>var2.asp</TITLE>
05 </HEAD>
06 <BODY>
07 <%
08 x = 10
09 y1 = "今日は"
10 y2 = "hello"
11 date1 = #00/7/31#
12 time1 = #10:46:32#
13 %>
14 x = <%=x%> <BR>
15 y1 = <%=y1%> <BR>
16 y2 = <%=y2%> <BR>
17 date1 = <%=date1%> <BR>
18 time1 = <%=time1%> <BR>
19 </BODY>
20 </HTML>
結果は、図3.4のようになります。

図3.4
■変数の誤用
リスト3.2の15行目で、たとえば
15 y1 = <%=y1%> <BR>
でなく、間違って2番目の"y1"を"y"とタイプしたとします。このファイルをvar3.aspとしてアクセスしますと、図3.5のようになります。
15 y1 = <%=y%> <BR>

図3.5
特に、エラーメッセージはなく、"y1 = "と空白が印字されるのみです。この例は単純な例なので、いわゆるバグ(虫)として割と簡単に誤り個所を探して訂正できるのですが、スクリプトが複雑になると、期待通りの処理結果がでない。しかしなかなか間違った個所がみつからないということで無駄な時間を過ごすことがままあります。そこであらかじめ使用する変数を宣言し、かつ宣言しないで変数を使用するとエラーとする方法があります。
使用する変数をあらかじめ宣言するためにDim文を使います。書式は次の通りです。
Dim 変数
あるいは、1回のDim文で複数の変数を宣言することもできます。
Dim 変数1,変数2,・・・・,変数n
【メモ】
VBScriptでは、変数の宣言を行うときに、その変数が整数なのか、文字列なのかなど変数型を明示する必要はありません。これは、VBScriptでは、すべての変数はバリアント型として定義されるからです。
Dim文は必須でなく、Dim文で変数の宣言をしなくてもスクリプトの中で変数は使用できます。
ただし、Option Explicitを宣言すると、あらかじめ変数を宣言しないで使用するとエラーとなるようにすることができます。このOption Explicit文は、一つのASPファイルの<%@ LANGUAGE="VBScript" %> 行の直後に記述する必要があります。
リスト3.2にOption Explicit文とDim文を追加したリストをリスト3.3に示します。このファイルをvar4.aspとします。
リスト3.3
01 <%@ LANGUAGE="VBScript" %>
02 <% Option Explicit %>
03 <HTML>
04 <HEAD>
05 <TITLE>var4.asp</TITLE>
06 </HEAD>
07 <BODY>
08 <%
09 Dim x,y1,y2,date1,time1
10 x = 10
11 y1 = "今日は"
12 y2 = "hello"
13 date1 = #00/7/31#
14 time1 = #10:46:32#
15 %>
16 x = <%=x%> <BR>
17 y1 = <%=y1%> <BR>
18 y2 = <%=y2%> <BR>
19 date1 = <%=date1%> <BR>
20 time1 = <%=time1%> <BR>
21 </BODY>
22 </HTML>
リスト3.3で17行目の2回目の"y1"を"y"と間違えた場合のリストのファイルをvar5.aspとし、アクセスしてみると図3.6のエラーメッセージが表示されます。

図3.6
つまり、Option Explicit文とDim文をあわせて使用することにより、変数を宣言しないままに使用すると「この変数は宣言されていません。:'y'」という明示的なエラーメッセージをえることができ、スクリプトの記述ミスを軽減することに役立ちます。
■バリアント型
VBScriptでは、すべての変数はバリアント型として扱われます。バリアント型とは、すべての変数型を扱うことのできる変数型です。実際にはその変数が使用される時点で、ある特定の変数型として扱われます。これは、VBScriptエンジンが自動的に判断します。
これは、いちいち変数の型を意識しなくても一見便利なのですが、場合によっては期待した効果が得られない場合があります。
そこで、型変換関数の積極的利用と変数名に想定している変数型を明示できるプレフィックスを付加することを薦めます。
■型変換関数
■変数名のつけ方
変数名のつけ方で一般に使われるプレフィックスは表3.1の通りです。
表3.1
| 変数型 | プレフィックス | 例 |
| 整数型 | int | intX |
| 長整数型 | lng | lngID |
| 文字列型 | str | strName |
| 日付時刻型 | dtm | dtmDate |
表3.1にしたがって、リスト3.3を書きなおしたものをリスト3.4に示します。このファイルをvar6.aspとします。
リスト3.4
01 <%@ LANGUAGE="VBScript" %>
02 <% Option Explicit %>
03 <HTML>
04 <HEAD>
05 <TITLE>var6.asp</TITLE>
06 </HEAD>
07 <BODY>
08 <%
09 Dim intx,stry1,stry2,dtmDate1,dtmTime1
10 intx = 10
11 stry1 = "今日は"
12 stry2 = "hello"
13 dtmDate1 = #00/7/31#
14 dtmTime1 = #10:46:32#
15 %>
16 intx = <%=intx%> <BR>
17 stry1 = <%=stry1%> <BR>
18 stry2 = <%=stry2%> <BR>
19 dtmDate1 = <%=dtmDate1%> <BR>
20 dtmTime1 = <%=dtmTime1%> <BR>
21 </BODY>
22 </HTML>
このファイルにアクセスした結果を図3.7に示します。

図3.7
■配列変数
変数の集まりを配列変数として表現することができます。書式は例えば1次元の場合は、
Dim varName(n)
とします。varNameは、配列変数名で、()内は配列要素の数です。実際には、varName(0)、varName(1)、varName(2)、・・・・、varName(n)と配列要素の順番を示す添え字は0からはじまり、1、2、・・・・・、nと合計n+1個の配列要素が確保されます。
2次元配列の場合は、
Dim varName(n1,n2)
とします。n1は第1次元の配列要素数、n2は第2次元の配列要素数です。
(例) Dim intA(3)
Dim strName(25,2)
サンプルをリスト3.5に示します。これをarray.aspというASPファイルにし、アクセスすると、図3.8のような結果が得られます。
リスト3.5
01 <%@ LANGUAGE="VBScript" %>
02 <% Option Explicit %>
03 <HTML>
04 <HEAD>
05 <TITLE>array.asp</TITLE>
06 </HEAD>
07 <BODY>
08 <%
09 Dim intA(3)
10
11 intA(1) = 1
12 intA(2) = 2
13 intA(3) = 3
14 %>
15 intA(0) = <%=intA(0)%> <BR>
16 intA(1) = <%=intA(1)%> <BR>
17 intA(2) = <%=intA(2)%> <BR>
18 intA(3) = <%=intA(3)%> <BR>
19 </BODY>
20 </HTML>

図3.8
intA(0)の配列要素も確保はされていますが、その値は未確定であることがわかります。これをEmpty値といいます。