Monthly Archives: 8月 2015

VBAによるプログラミング超入門講座(第4回)

今回は、Excelに付属するソフト「Visual Basic Editor」を使って、演習問題の解答例を実行する手順について説明します。

このページでは、以下の内容について説明しています。

Visual Basic Editorの使用目的

Visual Basic Editorは、以下の目的で使用します。

  1. プログラミング言語VBAで書いたソースプログラムをExcelに入力するため。
    本講座の第1回~第3回を読まれた方は、演習問題を解く際、紙と鉛筆を使ってソースプログラムを書かれたと思いますが、その状態では作成したプログラムは実行できません。Visual Basic Editorの画面から作成したソースプログラムを入力する事で、コンピューターおよびExcelに対して、実行して欲しいプログラム(すなわち作業指示書)の詳細を伝える事ができます。
  2. プログラムの記述誤りをチェックするため。
    Visual Basic Editorにソースプログラムを入力すると、単純な記述誤りを発見してくれます。
  3. 入力したソースプログラムを機械語のプログラムに翻訳しながら実行するため。
  4. 実行中のプログラムを途中で止めるため。
  5. 途中で止めたプログラムを続きから1行ずつ実行するため。
  6. 変数に記憶している値を確認するため。

上記の内、4~6は、作成したプログラムが期待どおりに動作せず、プログラムの誤りを見つけたいときに行う作業です。これらの作業のことを「デバッグ」といいます。

Excelの初期設定

Visual Basic Editorを使用するには、予めExcel側で必要な初期設定を行う必要があります。その手順を以下に示します。ここではExcelのバージョン「Excel 2010」を使用するケースを想定しています。

「開発」タブを追加する。

Excelの上部のタブの並びから、左端の「ファイル」タブを選択し(下図の①)、表示された画面から左端の下の「オプション」ボタン(下図の②)をクリックします。

pic_3

すると、新たなダイアログが表示されます。初期状態では、左端の一番上の「基本設定」が選択されていますので、左端の列の途中「リボンのユーザー設定」(下図の③)を選択して、下図の画面を表示させて下さい。その画面の右端の表示をスクロールさせて「開発」のチェックボックスを表示させて下さい(下図の④)。このチェックボックスが選択されていない場合は、選択して、OKボタンをクリックして下さい。

pic_4

結果、Excelの初期画面のタブに「開発」タブが表示されます(下図の⑤)ので、これをクリックして下さい。

pic_5

上図のような画面に変わります。この画面のリボンから、右端の「Visual Basic」(下図の⑥)をクリックして下さい。Visual Basic Editorが起動できます。

pic_1

なおVisual Basic Editorは、Excelを開いた状態で「Alt」キー(キーボードの左下付近にあります)とF11キー(キーボードの上側にあります )を「同時」に押す方法でも起動できます。

Visual Basic Editorの画面が開いたら、「表示」⇒「ツールバー」メニューの「標準」と「デバッグ」を選択しておいて下さい。

お勧めの追加設定

前節までの設定を行えば、VBAでプログラミングを始める事ができますが、追加で以下を設定される事をお勧めします。

プログラム入力途中に構文チェック結果をダイアログで表示させない

実際にVisual Basic Editorを使ってプログラムを入力し始めると、不完全なプログラムだとして、再三、ダイアログでエラーメッセージが表示されます。入力途中なのでプログラムが不完全である事は自分で解っているので、毎度、OKボタンでダイアログをクローズしないといけないのは面倒です。このエラー表示は、Visual Basic Editorの設定を変更する事で抑止できます。抑止した場合は、ダイアログは表示されなくなり、プログラムの入力画面上で、誤った行が赤字で表示されるようになります。

変数の宣言が無い場合にエラーを表示させる

本講座では、変数を使用するときは事前に「Dim」文で宣言する事を推奨しています。ですが、Excelではインストール直後は、変数の宣言なしに、いきなり変数を使って良い設定になっています。これは、プログラミングに慣れた人にとっては便利な機能ですが、プログラミング入門者にとっては、変数名を誤って入力してしまった場合にエラーが表示されないので、間違い探しに時間を要する危険性があります。

この問題を避けるには、プログラムの先頭で「Option Explicit」と宣言すれば良いです。これにより、作成するプログラムで宣言なしで変数を使用した場合、エラーが表示されるようになります。この「Option Explicit」を自分で書くのが面倒な場合は、Visual Basic Editorで事前に設定しておけば、自動的にこの行が宣言されます。

Visual Basic Editorに対して、上記の2つの設定を行うには、Visual Basic Editorの「ツール」⇒「オプション」メニュー (下図の⑦) を選択して下さい。

pic_6

結果、下図が表示されますので、上部のタブから右端の「編集」を選択し、「自動構文チェック」のチェックボックスを外し、「変数の宣言を強制する」のチェックボックスをチェックして下さい。

pic_77

ソースプログラム入力先の「関数」と「ボタン」の作成

VBAでソースプログラムを入力し、実行する方法には、幾つかの方法がありますが、本講座ではExcelのシート上に専用のボタンを追加し、そのボタンが押されたときに入力したソースプログラムを実行する方法を紹介します。

Excelで新規に空のファイルを開いて、シート”Sheet1”を表示した状態で「開発」タブ(下図の⑧)を選択します。更に「挿入」(下図の⑨)をクリックします。すると下図のような「フォームコントロール」とその下に「ActiveXコントロール」が表示されますので、「ActiveXコントロール」の中の上段の右端の「コマンドボタン(ActiveXコントロール)」(下図の⑩)をクリックして下さい。

pic_8

カーソルが矢印から「+」に変わりますので、ドラッグして、適当な大きさのボタンを作成して下さい。結果、リボンの「デザインモード」が選択された状態になります。

pic_9

上図の状態で、作成したボタンをダブルクリックして下さい。Visual Basic Editorが起動し、以下の画面が表示されます。

pic_10

ここまで作業した時点で、新規作成したファイルを「名前を付けて保存」で保存して下さい。Visual Basic Editorでは無くExcelの画面に戻って、「ファイル」タブ⇒「名前を付けて保存」ボタンをクリックし、開いたダイアログで「ファイルの種類」として「Excelマクロ有効ブック(*.xlsm)」を選択して、適当なファイル名で保存して下さい。

pic_11

以上の操作により、プログラムを実行するためのボタンと、そのボタンが押された際に実行される「関数」を作成したことになります。

ソースプログラムの入力方法

再びVisual Basic Editorの画面に戻り、紙に書いて作成したソースプログラムを下記の空行の部分に入力して下さい。

src1

第3回の演習問題の解答例を入力すると、以下のようになります。

src

この画面は、左画面のシート名表示から「Sheet1(Sheet1)」が選択されている場合に表示されます。万一、別のファイルが選択され、上記の部分が表示されなくなった場合は、左画面から「Sheet1(Sheet1)」をダブルクリックして、表示し直して下さい。

プログラムの実行方法

入力したプログラムを実行する方法には、以下の2つの方法があります。

  • Visual Basic Editorの画面を使って、少しずつ実行する方法。
  • Visual Basic Editorの画面は使わずに、Excelの画面から一気に実行する方法。

前者は「プログラム作成途中」の実行方法で、プログラムに間違いが無いか動作確認しながら少しずつ実行する方法です。後者は「プログラム完成後」の実行方法です。

プログラムを少しずつ実行する目的について(=デバッグ)

入力したソースプログラムに間違いがあった場合、プログラムは期待通りに動作しません。この場合、入力したソースプログラムを読み直し、自分で間違っている箇所を探し出す必要があります。

しかし、ソースプログラムを読み直しただけでは、どこが間違っているのか解らない事が多々あります。この場合は、プログラムを1行ずつ実行して、変数に記憶した値の変化や、Excelのシート/セルの変化を確認しながら、ソースプログラムの間違った箇所を特定する必要があります。

このようにVisual Basic Editorを使ってプログラムを少しずつ実行させ、その時の動作を確認することでプログラムの間違った箇所を見つける作業のことを「デバッグ」と呼びます。

プログラムを一気に実行する方法

Excel画面に戻り、「開発」タブを選択して「デザインモード」をクリックして、デザインモードが選択されていない状態に戻してください。「デザインモード」が選択されていない状態では、「デザインモード」のボタンの色がオレンジ色から白に戻ります。

「デザインモード」のボタンが選択されていない状態になったら、シート上のボタン「CommandButton1」をクリックして下さい。結果、入力したプログラムが実行されます。

プログラムを途中で止める方法

プログラムの実行に先立って、途中で止めたい行を選びます。Visual Basic Editorの下記画面でプログラムの左端の部分(下図の⑪)をクリックすると、選択した行の色が変わります。この状態で「ブレークポイント」が設定された状態になります。その後、Excelの画面に戻って「CommandButton1」ボタンをクリックすると、プログラムが実行され、事前に選択した行で止まります。
もしくは、プログラムの実行中、今止めたい…と思った場合は、「中断」ボタン(下図の⑫)をクリックします。

pic_12

プログラムを一行ずつ実行する方法

プログラムが途中で止まっている状態で、ツールバー上の「ステップ イン(F8)」ボタンか、「ステップ オーバー(Shift+F8)」ボタンのいずれかをクリックします(下図の⑬)。結果、1行だけ実行され、次に実行する行を表す黄色のラインが移動します。
pic_13

上図⑬の拡大図を以下に示します (左が「ステップ イン(F8)」で右が「ステップ オーバー(Shift+F8)」)。

pic_14

今のところ、この2つのボタンの何れをクリックしても、同じ動きとなり、1行分、プログラムを実行した後に止まります。この2つのボタンは、ご自分で関数を作成された場合で、かつその関数呼び出しを実行する場合に限り、動作が異なります。「ステップイン」は、呼び出した関数の中に入ってから止まります。一方「ステップオーバー」は、呼び出した関数から戻るまで1回で実行します。

変数が記憶している値を確認する方法

プログラムが止まっている状態で、マウスカーソルを変数名の上に移動させると、「変数=値」という表示がポップアップで表示されます(下図の⑭)。

pic_15

他には「表示」⇒「ウォッチウィンドウ」メニューを選択してウォッチウィンドウを表示した後(画面の右下に表示されます)、「デバッグ」⇒「ウォッチ式の追加」メニューを選択し、表示されたダイアログの「式」の欄に確認したい式(変数名やオブジェクト変数名を含む)を入力する方法があります。結果、停止する度に入力した式の値が確認できます。下図は、式として「row」を入力した例です。

pic_16

プログラムを最初から実行し直す方法

リセットボタン(上図の⑮)をクリックした後、再度、Excelのシートからプログラムを実行する「CommandButton1」ボタンをクリックします。

デバッグの注意点

  • Do~Loop等の繰り返しを含むプログラムをデバッグする場合は、繰り返しの先頭か最後に必ず「DoEvents」文を挿入して下さい。
    作成したプログラムに誤りがあり、無限ループに陥る事は多々あります。この場合、繰り返しの中に「DoEvents」文を挿入しておかないと、中断ボタンやリセットボタンでプログラムを止める事ができなくなります。この事を考えると、Do~Loopを書く場合は、予めループ内の最後にDoEventsを書く習慣を付けられるのが良いと思います。
  • プログラムを再実行する場合は、開発ツールのリセットボタンをクリックしてからExcel画面のプログラム実行開始ボタンをクリックして下さい。