初めての VBA (1)

本ページの Excel 2007 対応ページはこちら


本講義では Excel 上で Visual Basic というプログラミング言語を利用する方法を学ぶ。 Excel 上で用いる Visual Basic は正式には Visual Basic for Applications (VBA) と呼ばれる。
生協の書籍コーナーには VBA に関する多くの教科書を取り扱っているので、興味のある人は参考にしてみると良いだろう。
多くの人にとってプログラミング言語によるプログラミングは初めての経験であろうから、
しっかりと学習して着実に身に着けるように欲しい。

なぜプログラミングを学ぶのか

後期の授業では、Excel 上で利用できる Visual Basic for Applications (VBA) を用いて、
プログラミングの基礎を学ぶ。

まず、なぜプログラミングを学ぶのかを少し考えてみよう。

前期の授業では、主にメール/ワープロ (Word)/表計算 (Excel)/プレゼンテーション (PowerPoint) について学んだ。
これらのアプリケーションを使いこなせば、大学生活で必要なレポート・卒論等の作成に大いに役にたつ。
特に Excel は強力であり、うまく活用すれば卒業研究 (皆さんは ECP) においてグラフの作成やデータ解析等、多くの場面で役にたつだろう。

しかし、アカデミックな研究を行う際、 Excel の機能だけでは実現できない問題に直面することが多々ある。
例えば、 などである。

そのようなとき、Excel 以外の既存のアプリケーション (例えば画像処理ソフトなど) を利用できる場合もあるだろうが、
しかし、現実には既存のアプリケーションでは希望する機能が実現できない場合が多い。

その際は、自分でアプリケーションを作成して、コンピュータに望みの動作を実現させねばならない
それを可能にするのがプログラミング言語によるプログラミングである。

少し大げさに言えば、プログラミングによりコンピュータに自分の思い通りの働きをさせることができるようになる。
そのためにプログラミングを学ぶわけである。

世の中には様々なプログラミング言語があり、それぞれ得意/不得意分野があり、用途によって使い分けられている。 これらの言語はそれぞれ文法が微妙に異なるのだが、基本的な考え方は近いので、
一つの言語をマスターすれば他の言語をマスターするのは比較的容易である。

これらの中で Visual Basic (特に VBA) を学ぶのは、以下の理由による。


VBA によるプログラミングの例1〜フーリエ変換による音声分析

Visual Basic for Applications (VBA) で何ができるかの例として フーリエ解析による音声分析について紹介する。

Excel / OpenOffice で学ぶフーリエ変換入門 表紙

以下の図は、上記書籍に基づいて、自動車のエンジン音をフーリエ解析して、
エンジンの回転数を見出している様子である。



このような解析は VBA を用いずに Excel のみで行うことは不可能であり、 VBA の機能を追加利用して初めて実現できると言える。
(Excel のみでは音声ファイルは読み込めないし、また、長時間の音声データのフーリエ解析も行えない)

このように、 VBA を活用すると Excel だけでは行えない複雑な解析が行えるようになる。



VBA によるプログラミングの例2〜モーターの制御

次に、VBA でモーターを制御する例について紹介する。

一般にモーターというとミニ四駆などの模型で用いられる DC モータと呼ばれるものを想像する方が多いのではないだろうか。
DC モーターは電圧を与えた際に (あるいはスイッチを ON にした際に)、電圧の大きさに応じた速さと向きで回転する。
DC モーター以外にも世の中には様々なモーターの種類があり、 速度指定、角度指定など様々な制御を行うことができる。

その中で、ステッピングモーターと呼ばれるモーターの制御を VBA から行っている動画を紹介する。
やや見にくいかもしれないが、Excel 上にボタンがいくつか配置されており、 押したボタン (「右回転」、「左回転」、「終了」) に応じて、
モータがそれぞれ右回転、左回転、停止を行っている模様である。


このとき、ステッピングモーターを制御するための流れは以下のようになっている。
ディスプレイ前の段ボールの上にステッピングモーターとモーター制御用回路があるのが見えるだろう。




Excel でモーターを制御する必然性はあまりないかもしれないが、 技術的にこのようなことも可能であるというデモンストレーションとして提示した。

なお、このモーター制御は以下の書籍を参考にしている。



プログラムを書き始めるまでの準備

まず Excel を起動し、下図の Visual Basic Editor ボタンをクリックしよう。

自宅などでの自習の際、このボタンが存在しない場合は準備用ページの「Excel での準備」を参照すること。



すると、以下のように Visual Basic Editor というウィンドウが立ち上がる。
デフォルトで下図のような状態になるので覚えておこう。



今後、この Visual Basic Editor を用いてプログラミングを行ってゆくわけである。
プログラムの記述を始めるには、まず、メニューから「挿入」→「標準モジュール」を選択しよう。



すると、Visual Basic Editor の内部に "Module1" というタイトルのついた小さな窓が現れる。
このとき、画面左側のツリー構造表示部分に「標準モジュール」「Module1」という項目が現れていることにも注意しよう。

さらに、"Module1" ウィンドウの内部に「Option Explicit」と既に書かれていることをチェックして欲しい。

自宅などでの自習の際、「Option Explicit」が書かれていない場合は、 準備ページの「Visual Basic Editor での準備」の「『変数の宣言を強制する』のチェック」を見直してからやり直そう。





プログラミングと実行

以上の準備の後、「Option Explicit」の行に続けて、以下の内容を記述しよう。

これはVisual Basic と呼ばれるプログラミング言語で書かれたプログラムであり、
本講義ではこの Visual Basic の文法を学び、使いこなせるようにするのが目的である。



以下に記述に際していくつかの注意を挙げる。

  • プログラム中、「こんにちは」という日本語以外は全て半角文字である。

  • 「Sub prog1()」の行を書き終えて改行すると、自動的に「End Sub」の行が現れる。
    このように、VBA の環境には様々な入力支援機能がついている。

  • 「Sub prog1()」の行において、「prog1()」は「プロシージャの名前」であり、実は自由に決めて良いのだが、
    当面はこちらの記述にそのまま従うのが良いだろう。

  • 「MsgBox」の行の先頭の「字下げ」は「TABキー」を押すことで実現される。

  • VBA の環境はかなり賢く、半角で書くべきところを全角で書いても正しく変換してくれる。
    例えば、「" (半角)」を誤って「” (全角)」で書いてしまっても、自動的に「” (全角)」を「" (半角)」に変換してくれる。

    しかし、プログラミング言語は一般的に半角文字で記述するものであるし、他のプログラム言語の環境では
    上記のような変換を行ってくれるとは限らない。

    そのため、プログラミングを行う際は、半角文字と全角文字を (自動変換任せではなく) 自分の意志で使い分けるべきである。

  • 半角/全角と同様、VBA の環境では大文字/小文字も自動的に変換してくれる。
    例えば、上のプログラムを全て小文字で記述しても、環境が自動的に大文字/小文字混じりの正しい記述に変換してくれる。
    しかし、やはり半角/全角と同様に、大文字/小文字は自分で意識的に使い分けた方が良い


さて、記述が終わったら、下図の「Sub/ユーザーフォームの実行」ボタンをクリックしよう。
これは、記述したプログラムを実行するためのボタンである。
(キーボードの「F5」キーを押しても同じ効果が得られる)



すると、画面が Excel のマス目に変わって下図のように「こんにちは」と書かれたダイアログが現れる。
想像がつくかもしれないが、これは記述したプログラム中の 「MsgBox "こんにちは"」なる行が実行されたのである。





プログラムの実行に関する注意

プログラミングの実行に関して注意をここで述べておく。

このプログラムを実行する前に、マウスカーソルが下図のように 「prog1() プロシージャ」内にあるようにしてから実行しよう。
(Sub prog1() 〜 End Sub の間のこと)

なお、「プロシージャ (procedure:手続き)」という用語の意味は後の講義で明らかになるが、早く VBA の用語に慣れるために、
今後も積極的にこの言葉を使っていく。



この場合、問題なくプログラムが起動することがわかるであろう。

次に、マウスカーソルをわざと prog1() プロシージャの外に出してプログラムを実行してみよう。



今度は以下のようなダイアログが現れる。
これは、実行するプロシージャが prog1() で良いかどうかを尋ねているのである。

もちろん、prog1() を実行して構わないので、「実行」ボタンをクリックする。



一つのプログラムに複数のプロシージャがある場合 (いずれ学ぶ) 、 上のようなダイアログが現れて実行するプロシージャを選択することができる。
このダイアログが出ても慌てないようにしよう。

保存と読み込み

記述したプログラムについて堀り下げる前に、VBA で記述したプログラムを保存し、それを起動する方法を学ぼう。
通常の Excel ファイルの保存と読み込みに比べると若干癖があるので注意しよう。

まず、Visual Basic Editor の画面のままでは保存ができないので、Visual Basic Editor から Excel に戻る必要がある。

そのため、下図の「Miscrosoft Excel」ボタンをクリックしよう。



すると、通常の Excel の画面に戻るので、メニューから「ファイル」→「名前を付けて保存」を選択しよう。



あとは通常通り、「マイドキュメント」以下のどこかにファイルを保存すれば良い。

次に、保存したファイルを読み込んで起動してみよう。ファイルをダブルクリックすると、 以下のように警告のダイアログが現れる。

見ての通り、「ファイルにはマクロが含まれているので危険である」と警告しているのであるが、
自分で作成したファイルで無害であることがわかっているのならば「マクロを有効にする」をクリックする。
(もちろん、この授業で作成したファイルであれば、マクロを有効にして構わない)

ただし、見知らぬ人からメール等で送られた素性の怪しいファイルでマクロを有効にすることは危険なので避けるべきである。



マクロを有効にして Excel を立ち上げたら、再び以下のように「Visual Basic Editor」ボタンを押すことで、記述したプログラムを見ることができる。







←Visual Basic for Applications (VBA) を用いる準備初めての VBA (2)→

Excel / OpenOffice で学ぶ Visual Basic for Applications (VBA)に戻る