[Excel2013 で VBA] 初めての VBA (1)

本講義では 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 2013 で VBAを学ぶに当たり、 用いるファイルの保存形式について学んでおこう。

まず、Excel 2013 を起動し左上の ファイル タブ をクリックしよう。



ファイルの保存や印刷がここから行えるのだが、そこで「名前を付けて保存」を選択し、
さらに、保存先を「最近使用したフォルダー」や「参照」から選択する。



ここでは「ファイルの種類」の選択肢に着目しよう。

Excel で VBA を学ぶにあたり、この「ファイルの種類」の違いを理解することは必須である。



このうち、本講義に関連する重要な形式は以下の 3 つである。

種類 拡張子 Excel 2007 / 2010 / 2013 Excel 2003 マクロの保存 用途
Excelブック .xlsx × × 前期に扱った通常の Excel ファイル
Excel マクロ有効ブック .xlsm × 後期に扱うマクロ入り Excel ファイル
Excel 97-2003 ブック .xls 上記の両方の用途で用いることができ、過去のバージョンとの互換性を重視する 場合に用いる。


デフォルトでは拡張子が xlsx という Office 2007 で導入された新しいファイル形式で保存されるが、
後期の講義ではマクロを用いるので xlsm でないと保存できない

なお、このようなファイル形式の互換性の問題は Word や PowerPoint でも発生する。
以下が Word と PowerPoint のファイル形式のまとめである。

種類 拡張子 Office 2007 / 2010 / 2013 Office 2003 用途
Word 文書 .docx × Office2007 以降用のワードファイル
Word 97-2003 文書 .doc 過去のバージョンの Office でも開けるワードファイル
PowerPoint プレゼンテーション .pptx × Office2007 以降用のパワーポイントファイル
PowerPoint 97-2003 プレゼンテーション .ppt 過去のバージョンの Office でも開けるパワーポイントファイル




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

まず Excel を起動し、リボンの開発タブをクリックしてから「Visual Basic」というアイコンをクリックしよう。

開発タブがない場合は、「Visual Basic for Applications (VBA) を用いる準備」の設定を行ってから改めて実行して欲しい。



すると、以下のように Visual Basic というウィンドウが立ち上がる。
デフォルトで下図のような状態になるので覚えておこう (これから毎回登場する)。



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



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

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

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





プログラミングと実行

以上の準備の後、「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() を実行して構わないので、「実行」ボタンをクリックする。



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



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

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