VBScriptでプログラミングの基礎を学ぼう12【入門記事総集編】

VBScript入門
スポンサーリンク

久々の更新です。今回はこれまで更新してきたVBScriptでのプログラミング入門記事の内容を復習しつつ、VBScriptでプログラミングを習得するうえでのポイントを挙げていきます。

実行ファイルの作成方法

空のテキストファイルを作成し、拡張子を.vbsに変更するか、メモ帳を開いて、「名前をつけて保存」てファイル名の最後に.vbsと書き足して保存する。

変数について

数値や文字列など、何らかの値を一時的に入れておく為の入れ物。使用するには、事前に「宣言」をする必要がある。※VBScriptでは宣言しなくても実は使えるが、バグの原因になるので、常に宣言してから使用することを強く推奨します。

宣言のやり方

Dim 任意の変数名

尚、データ型の指定は出来ない。

大文字小文字の扱いについて

同じ文字として扱う。例えば、MSGBOXもmsgboxも同じ文字として扱うので、大文字、小文字のどちらで書いても良い。ただ、変数の頭文字は大文字にするとか、大文字小文字の使い分けマイルールを作っておいた方が、後からプログラムを見直した時に見易いので(可読性が高い)、使い分けを推奨します。

条件分岐構文について

プラグラム内で特定の条件によって処理内容を分岐します。プログラミングをする上でとても重要な仕組みです。条件分岐構文には幾つか種類があり、それらを使い分けていく必要があります。

IF

もっとも基本的な条件分岐の構文はIF文です。IF文の使い方だけ理解すれば、他の条件分岐用の構文を知らなくても大体のプログラムは作れます。

IF文のもっとも基本的な構文は以下です。

If 処理を分岐する条件 Then
    条件に合う場合の処理
End If

IFで始まり、END IFで終わります。

「条件に合わなかった場合」の処理を入れるには ELSE を使います。

If 処理を分岐する条件 Then
    条件に合う場合の処理
Else
    条件に合わなかった場合の処理
End If

複数の条件で処理を分岐するする場合は ELSEIF を使います。また、ELSE を組み合わせることで、各条件に当てはまらなかった場合の処理も入れることが出来ます。
If 処理条件1 Then
    処理条件1に合う場合の処理
EiseIf 処理条件2 Then
    処理条件2に合う場合の処理
EiseIf 処理条件3 Then
    処理条件3に合う場合の処理
Else
    全ての条件に合わなかった場合の処理
End If

他にも、良く使われる条件分岐の構文としては、SELECT CASE があります。処理分岐条件が複数かつ複雑ではない場合であれば、IF文を使うより見易く扱い安いです。

SELECT CASE

CASE文のもっとも基本的な構文は以下です。

Select Case 条件
    Case 条件の値
        処理1
    Case 条件の値
        処理2
    Case 条件の値
        処理3
    Case Else
        上記の条件に合わなかった場合の処理
End Select

Select Caseで始まり、End Selectで終わります。条件が複数ある場合は、ElseIfで処理パターンを列挙するより処理の分岐条件がわかりやすくなっています。

Select CaseでもElseは設定しなくても動作はしますが、条件の値に意図しない値が来ることも想定して、必ずElseで想定外の値が来た場合の処理を組んでおくことを推奨します。IF文での分岐でも同様です。

VBScriptや、同じ系列のVBAでもそうですが、このIFとSELECT CASEは頻繁に利用する構文なので、しっかり習得しておけると良いです。



比較演算子・論理演算子

比較演算子は前述の条件分岐でも必ず使用しますが、一般的なプログラミングでは値と値と比較してその結果によって処理を分岐することが基本的な構造になります。当ブログでも度々、= イコールで値の比較をしていますが、この = イコールも比較演算子の一つです。また、論理演算子では、And や Or などで、IF文内の分岐条件を細かく制御できるようになります。この比較演算子や論理演算子にはどのような種類があるかもおさらいしておきましょう。

比較演算子

記号内容Trueの例
=等しい"ABC" = "ABC"
< >等しくない"ABC" < > "CBA"
<より小さい
(右辺)より(左辺が)小さい
1 < 5
>より大きい
(右辺)より(左辺が)大きい
5 > 1
<=以下
右辺と左辺が同じか、
右辺より左辺が小さい
1 <= 5
>=以上
右辺と左辺が同じか、
右辺より左辺が大きい
5 >= 1

VBScriptで使用できる比較演算子はほぼこれで全てです。他にも有りますが割愛します。

論理演算子

記号内容使用例
NOT論理否定
~ではない
Not x = "a"
変数xは"a"ではない
AND論理積
~かつ
x = "a" And y = "b"
変数xが"a"かつ変数yが"b"
OR論理和
~または
x = "a" Or y = "b"
変数xが"a"または変数yが"b"

VBScriptで使用できる論理演算子は他にも有りますが、この三種類だけ覚えておけば充分です。

繰り返し構文(ループ文)

特定の条件の間、処理を繰り返します。繰り返し構文も複数種類が有りますが、全てを使いこなす必要はなく、せいぜい2種類ぐらいの繰り返し構文を覚えるだけで充分だと思います。繰り返し構文はプログラミングを習得するにあたって非常に重要な仕組みなので、確実に使えるようにしておきたいです。

FOR文

FOR文では、処理を繰り返す回数を指定します。例えばある文字列から特定の文字を探す処理を作る場合、ある文字列の全文字数を先に取得して、処理を繰り返す回数として使い、その回数文一文字ずつ文字をチェックして、特定の文字が存在するかをチェックするようなプログラム構成が作れます。

Dim StrCount
Dim TargetStr

TargetStr = "あいうえお"

'文字数を取得
StrCount = Len(TargetStr)

'文字数分繰り返す※Stepは省略可
For i = 1 To StrCount Step 1
    '一文字ずつ切り出して"え"と比較
    If "え" = Mid(TargetStr,i,1) Then
        Msgbox "存在します。"
    End If
Next

DO文

DO文ではある条件を満たすまで、または満たさなくなるまで繰り返します。構文はDO で始まり、LOOP で終わります。尚、繰り返す際の条件の指定方法は二種類有り、「条件を満たす間だけ繰り返す」指定と「条件を満たさない間だけ繰り返す」指定が出来ます。

■条件がTrue(合致する)の間ループ
Do While 条件 Loop

■条件がFalse(合致しない)の間ループ
Do Until 条件 Loop

上記のWhileとUntilはどちらか一つを覚えておけば十分ですが、Untilの方が「条件合えばループを止める」処理になるので、より直感的だと思います。

当ブログでもサンプルコードを掲載していますが、ADOでデータベースから取得したデータをレコードセットに格納して、そのレコードセットの行数分ループするような処理とも相性が良いです。

RecordsetオブジェクトのEOFプロパティがTrue(カレントレコードが無い)という条件で、Until を使ってDO文でループさせ、ループ内の処理の最後にレコードセットのカレントレコードを次に移動させる処理を入れる、といった感じで実装します。

↓以前記事はこちら

【VBScript】SQLServerに接続してSQL(SELECT)を実行
SQLServerに接続して、SQLを実行し、その結果を取得するまでのサンプルコードです。 Option Explic...

配列

変数の場合は、一つの変数に一つの値しか入れられませんが、配列だと、一つの変数(配列)に複数の値を格納できます。

仮にブログラム内で100個の値を保持する必要があった場合に、変数を100個宣言して作成することと、添字が100の配列を一つ宣言して作成することは、どちらも要件を満たすが、明らかに後者の方が効率的だということは理解して頂けるかと思います。

配列は通常の変数と同様に、Dimで宣言をしますが、変数名の右側にその配列に格納出来るサイズ(添字)を設定します。

Dim 配列名(格納予定のデータ個数 − 1)
Dim Hairetsu(10)

Dim Hairetsu(4)   '5個の値を入れることの出来る配列を宣言します。

'配列への値の入れ方
'添字を指定して配列に値を代入します。
'添字は0から始まるので、添字0が一つ目の値になるとこは要注意
  Hairetsu(0) = "あいうえお"
  Hairetsu(1) = "かきくけこ"
  Hairetsu(2) = "さしすせそ"
  Hairetsu(3) = "たちつてと"
  Hairetsu(4) = "なにぬねの"

'配列から値を取り出すには添字を指定する必要があります。
  Msgbox Hairetsu(0)
  Msgbox Hairetsu(1)
  Msgbox Hairetsu(2)
  Msgbox Hairetsu(3)
  Msgbox Hairetsu(4)

'配列の値の数だけループさせたい場合は以下のようにします。
'LBoundは引数で渡された配列の最も小さいインデックス(添字)を返し、
'UBoundは最も大きいインデックス(添字)を返します。
  For i = LBound(Hairetsu) To UBound(Hairetsu)
      Msgbox Hairetsu(i)
  Next

配列の活用方法としては、例えばCSVファイルをVBScriptで読み込ませて、カンマ区切りのCSVであれば、Array関数の引数として、読み込んだCSVの一行をまるっと指定してあげることで、カンマ区切りの値が配列としてそのまま格納出来ます。
Dim Hairetsu    'Array関数で配列化させる場合はいったん通常の変数として宣言

'Arrayの戻り値を変数に渡すことで変数が配列化します。
Hairetsu = Array("あいうえお","かきくけこ","さしすせそ","たちつてと","なにぬねの")

'配列化しているので、添字を指定して値を取り出すことが出来ます。
Msgbox Hairetsu(3)

配列は変数より少し難易度が上がりますが、是非習得してもらえると良いかと思います。

Windows10で文字化けする場合

Windows10でテキストファイルを作成した場合の規定の文字コードがVBScriptに対応していないことが原因です。
詳しい原因の解説と、その対応方法を記事にしてあるので参照してください。

【VBScript】Windows10でmsgboxが文字化けする原因と対策
今回は「Windows 10」環境でVBScriptのプログラムを作るとmsgboxが文字化けする現象に関して、その原因...

今回のVBScriptでのプログラミング講座の記事は以上です。皆さまの参考になれば幸いです。

次回もよろしくお願い致します。

↓次回の記事はこちら

VBScriptでプログラミングの基礎を学ぼう13【オブジェクト変数】
久しぶりにVBScript入門記事を更新します。 今回はVBScriptにおける「オブジェクト変数」について紹介し...

↓前回の記事はこちら

VBScriptでプログラミングの基礎を学ぼう11【配列】
配列についてさらに学ぼう 前回は配列について学習しました。配列とは変数の一つで、重箱の様に値を何個も重ねて格納出来る仕...

 

↓VBScriptの習得には良いテキストエディタを使うことが近道です。テキストエディタの活用はこちら↓

【矩形選択・正規表現】テキストエディタを活用してデータ加工
IT技術者は作業が早いと思いませんか? 大量のデータに何らかの加工をしないといけなくなったとします。 加工内...

 

↓Excelなどの事務作業を自動化したい人はこちら↓

【Excel VBA 入門】初めてのプログラミング 超簡単なVBAの学習方法
今回はプログラミング経験の無い人が独学で学習していく場合に、一番最初に試してみると良い学習方法を紹介します。 私自身も...