K-fix Learning & Playing

基礎編


VBAにTRY ②

変数を使った簡単なVBAを記述してみましょう。まず、あなたの氏名を問いかけるウィンドウを表示させ、それをメッセージウィンドウで表示させることにします。以下のとおりに記述してください。


                    Sub Shimei()
                        Dim Name As String
                        Name = InputBox("あなたの名前を入力してください","名前入力")
                        MsgBox "あなたの名前は" & Name & "さんですね。"
                    End Sub
                

記述した後に実行してください。最初に、まず氏名を入力させるウィンドウが開きます。

自分の名前を入力し(この例では"宮崎太郎"と入力)、OKボタンをクリックすると名前を表示したメッセージが表示されます。

では、このVBAコードの意味を解説していきましょう。

2行目は、変数宣言を行っています。変数名をNameとし、データは文字列として扱う宣言です。
3行目は、InputBox関数を用いて、入力ボックスを表示させます。この中に記述されたものを文字列(String)として扱う変数Nameの中に格納することを意味しています。
4行目は、MsgBox関数を用いて、「あなたの名前は」と変数Nameと「さんですね。」を組み合わせたメッセージを作成します。文字列をつなげるには「&」を使用します。記述する際には、&の前後には半角の空白を入れることを忘れないようにしてください。
つまり、3行目で名前(文字列)を入力させて、その名前をName(変数)に格納し、4行目で格納されている名前を表示させるという処理になります。

InputBox関数の書式

InputBox(prompt、title、default、xpos、ypos、helpfile、context)

prompt         :入力ボックスに表示されるメッセージ。(省略不可)
title           :入力ボックスウィンドウに表示されるタイトル名。
default         :入力ボックス内にあらかじめ表示させたい文字列を指定。
xpos          :入力ボックスウィンドウの画面上の表示位置(X座標)
ypos          :入力ボックスウィンドウの画面上の表示位置(Y座標)
helpfile/context   :入力ボックスに状況依存型のヘルプファイルを割り当てる時に使用。

¶ promptだけは省略できません。その他の引数は、省略可能です。

MsgBox関数の書式

MsgBox(prompt、Buttons、title、helpfile、context)

prompt       :メッセージボックスに表示されるメッセージ。(省略不可)
buttons      :メッセージボックスに表示されるボタンの種類とアイコンを指定。
title         :メッセージボックスのタイトル名。
default       :入力ボックス内にあらかじめ表示させたい文字列を指定。
helpfile/context :メッセージボックスに状況依存型のヘルプファイルを割り当てる時に使用。

¶ promptだけは省略できません。その他の引数は、省略可能です。

&演算子

複数の文字列を結合させたいときに使用します。記述の際は&の前後に半角の空白を入れる。

例)"東京都" & "世田谷区" & "2005" →  「東京都世田谷区2005」

この演算子を用いることで、文字と文字、文字と数字を結合し、1つの文字列に変換できます。

-補足:変数の種類-

変数にはその有効範囲の違いによりいくつかの種類に分かれます。この有効とは、変数が使用できるという意味と値が保持されると言う意味です。次のような変数の種類があります。

  • ローカル変数
  • プロシージャ内で宣言され、そのプロシージャの中だけ有効となります。有効とは、そのプロシージャからしかデータの代入や変数の使用ができなく、プロシージャが終了すると変数も代入されているデータも消滅します。
  • モジュールレベル変数
  • モジュールでの宣言セクションでPrivateステートメントによって宣言します。モジュール全体で有効となります。そのモジュール内に属するすべてのプロシージャから、変数の使用、代入が可能となります。
  • パブリック変数
  • モジュールでの宣言セクションでPublicステートメントによって宣言します。このタイプの変数は、アプリケーション全体で有効となります。すべてのモジュールのすべてのプロシージャから利用できますが、アプリケーションを終了すると変数はリセットされます。
-補足:プロシージャ記述の機能-

自動構文チェック: コードを入力している途中で、誤ったステートメント(構文)を入力した場合、その場で誤りを指摘されます。

入力サポート: コードの入力途中でリスト一覧が表示されることがあります。そのリストから適切な項目を選択することで入力スピードをアップできます。また、頭文字を入力すると指定したアルファベットの項目にジャンプし、次のアルファベットを入力するごとに入力したい項目に行き当たります。入力したい項目が選択されていれば、Tabキーを利用することで確定スピードが早くなります。

行の分割: 1つのステートメントが長くなった場合、それを途中で改行したい場合があります。行を区切るには、行末で<半角スペース>と<アンダーバー>を入力します。そのまま改行してしまうとエラーが表示されます。
なぜなら、VBAコードは1行にすべての構文を入力することが前提となっているからです。通常、処理は上から順番に下へと向かって処理され、1行にその処理のための構文を記述することで、次の行の処理をするようになっています。以下に記述例を示します。

上の例では4行目と5行目は分かれているように見えますが、分離されているわけではありません。行末に<半角スペース>と<アンダーバー>を入れることで、下の行に続きを記述できるようにしています。

コメント: コードを記述する際に、ステートメントの意味や定義をコメントとして記述することができます。そのまま記述すると、処理の対象となりますので、処理の対象とならないようにコメントを記述するには、行の頭に「‘」(シングルコーテーション)を入力します。するとその行の右側すべてがコメントになります。コメント化をしたり非コメントにするには、[編集]ツールバーを利用します。
[表示]メニューから[ツールバー]を選択し、[編集]をクリックすると下のようなツールバーが表示されます。

コメントにしたい行を選択してから、コメントブロックボタンをクリックすると、行頭に「‘」が表示され、コメント化されます。解除する場合は、非コメントブロックボタンをクリックします。

これらの機能をうまく利用して、VBAコードを記述していけば、プロシージャの作成がスピードアップできるはずです。