1. Excel-VBA
Excelには「VBA(Visual Basic for Applications)」というプログラミングの機能が付属しています。なんの準備もなく使えます。VBAをマスターすれば、エクセルの自動処理マクロや、様々なプログラムを作ることが可能となります。ここでは、1回目として、VBAの使い方と簡単な自動処理マクロの例を紹介します。なお、「VBA」という言葉はプログラム言語のことを差し、そこに書かれた記述(内容)のことを「マクロ」と呼びます。
2. マクロの記述(VBA使用)の準備
Excelを使っていてもVBAの存在に気付かない人も多いと思います。「メニューバー」にVBAに関係する「開発」が出ていないのかもしれません。
▶ メニューバーに「開発」を表示する。
- 「ファイル」→「オプション」の「リボンのユーザー設定」で、「メインタブ」の「開発」にチェックを入れてください。メニューに「開発」が現れます。
▶ VBAウインドの表示
- 「開発リボン」を開いて「Visual Basic」を押すと、VBAのウインドが開きます。
- VBAウインドの左側には、エクスプローラ風のツリー等が表示されます。
- エクセル「シート」と「VBAウインド」の二つが見えるように配置しておいてください。
▶ コードウインドの表示
マクロを記述するため「コードウインド」をVBAウインドに表示する手順は下の通りです。
- Sheet側の「マクロの記録」を押す。
- マクロの記録ウインドが開き、マクロ名の入力を求められます。ここでは、デフォルトで出てくる「Macro1」のままで、「OK」を押す。
- VBAのプロジェクトエクスプローラーに「標準モジュール」フォルダが生成されるので、それを開け、「Module1」をダブルクリックすると、コードウインドが見え、マクロの内容(Subプロシージャ:Sub Macro1()~End Sub)が表示されます。
- 「‘」は「以降注釈」という意味です。プログラムが分りやすいように注釈を書きます。注釈はマクロの動作には関係ありません。
- (sheet側)開発リボンの「記録終了」を押して、記録を止める。
3. マクロを自動生成する
「マクロはどのように書くのか?」を解決する一歩目は、マクロの自動生成です。自動生成しながら現れたマクロを眺めると、「なるほど、こう書くのだ」と了解できます。これで、「エクセルの自動化」まではできるようになります。マクロの自動生成の手順を説明します。
▶ 自動生成1(範囲の選択、セルへの代入)
いったん、Excelを閉じて、再度Excelを起動し、新規ブック(空白のブック「Book1」)を作製します。上記「2.コードウインドの表示」まで行って、「記録終了」は押さないで、次の作業に入ります。○ セルへの選択
- (シート側)A2セルを選んでください。そうすると、「Macro1」に「Range(“A2”).Select」が挿入されます。これで、セルの選択法を把握できました。(この作業中にウインドを移動させた人は、「Application.Left」等も現れます。それらは消しても良いです。)
○ セルへの代入
- 次に、A2に「10」と入れ、改行します(カーソルはA3に移動)。次の命令が付加されます。
- ActiveCell.FormulaR1C1 = "10"
- Range("A3").Select
▶ 自動生成2(ファイルの生成、ウインドの切り替え、ファイルの保存)
続けて、「新たなブックを作って、そのブックにコピペして、ファイルを保存する」命令を追加してみます。
○ 新規ブックの作成
- (シート側)「ファイル」→「新規」→「空白のブック」を選ぶと、マクロに、「Workbooks.Add」が追加されます。これで、ブックの追加の命令が分かりましたね。ブック名は「book2」になったと思いますが、これまでの作業履歴の関係で「book3」とか他の番号かもしれません。なお、この作業で、現在のアクティブなウインドは「Book2」になりました。
○ ウインドの切り替え
- 「book1」のウインドを押すと、「Windows("Book1").Activate」が現れ、「book1」がアクティブになります。これで、ウインドの切り替えの方法が分かりました。
○ コピー
- この「book1」の「A2」セルを選んで。「10」をコピーします。そうすると、「Range("A2").Select」、「Selection.Copy」の2行が追加されます。「選んでコピーする」命令が分かりました。
○ ペースト
- 「book2」のウインドに移動して、B2セルに、ペーストすると、「Windows("Book2").Activate」「Range("B2").Select」、「ActiveSheet.Paste」が追加され、ウインドを切り替えて、セルを選んで、ペーストする方法が分かりました。
次の作業に入る前に、「Application.CutCopyMode = False」が追加され、コピペのモードが終了したのだと理解できます。
○ ブックの保存
- 最後に、新たに生成した「book2」を保存します。デフォルトの保存先は、ユーザーのドキュメントのフォルダです。この時、以下が追加されています。
- 「ActiveWorkbook.SaveAs Filename:="C:\Users\ユーザー名\Documents\Book2.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False」
- 「アクティブのワークブックをファイル名「Book2」でユーザーのドキュメントホルダーに保存する、フォーマット形式はxlOpenXMLWorkbook,バックアップ保存はしない」という意味だろうと察しはつきます。
○ マクロの記録終了
- 最後に、「Book1」に戻って(Windows("Book1").Activate)、シート側の「記録終了」を押してマクロの記録を停止します。
以上で、「Macro1()」というマクロが完成しました
○ マクロ付きブックの保存
- この「Book1」を保存しますが、マクロ付きのブックの保存の場合、いったん警告がでます。「Excelマクロ有効ブック(拡張子「.xlsm」)」を選び、ここではファイル名「Macro1.xlsm」として保存します。
▶ マクロ作成中のブックの状況
▶ 作成したマクロのリスト
4. マクロの実行
▶ マクロの実行
- Excelが動いていたら、Excelを終了する
- 「Macro1.xlsm」を立ち上げる
- マクロ付きのファイルを開くと「セキュリティの警告」が出ますが、今のマクロは安全なので、「コンテンツの有効化」を押し、マクロを有効にします。警告が消えます。
- すでに入っている「A2セル」の「10」を消す。
- 「開発リボン」にある「マクロ」を押し、ます。マクロ「Macro1」を選んで「実行」を押します。
- マクロが実行され、A2に「10」が入力されますが、その後に「実行時エラー」で停止します。
- 「デバック」を押すと、マクロのエラー箇所が表示されます。
- マクロを一旦停止(リセット)します。
▶ エラーの修正(ファイル名の修正)
マクロのリストを見ると、ファイル名が正しく入っていないことが分かります(上図の赤線部分を参照)。マクロを作る時には「Book1」のファイルで作って、そのファイルを「Macro1.xlsm」として保存したこと、新規追加ファイルが「Book2」になっていることがエラーの原因です。修正は以下の通りです(下図の赤線部分参照)。
- 「Book1」は「Macro1.xlsm」に変更する。拡張子もつける。
- 「Macro1.xlsm」を新規に立ち上げた場合、追加されるブックは「Book1」になるので、「Book2」を「Book1」に変更する。状況によっては別の名前かもしれません。追加するブック名を確認して、修正してください。
- 保存ファイル名も「Book1」に変更する。
- 変更したマクロの保存:VBAウインドの「ファイル」→「上書き保存」。
▶ マクロの再実行
- Excelが動いていたら、Excelを終了する
- 「Macro1.xlsm」を立ち上げる
今度は、「Macro1.xlsm」のマクロ「Macro1」を実行すると、A2セルに10が入力され、Book1を生成し、「Macro1.xlsm」に戻って、A2セルをコピーして、Book1に移動して、B3セルに、10をペーストし、そのファイルを。(Cドライブの)ドキュメントホルダーの中に保存したはずです。
▶ 修正後のマクロのリスト
最後に、修正したマクロのリストを示します。赤線部が変更後のファイル名です。なお、注釈行(‘)は、マクロ作成後に挿入、削除しました。
5. まとめ
VBAの準備、マクロ作成の実例を示しながら作成法、実行法を示しました。ここまでの情報で、マクロによる自動処理はできるようになると思います。しかし、プログラムとなると、変数を使用する必要があり、その点はまだ不足しています。次の解説では、変数の取り扱いや、Excelでのプログラムの実例を示し、プログラム作製に関し説明します。
2回目解説へのリンク:VBAの予備知識と簡単なプログラム(変数とセル)