VBA

提供:yonewiki

言語と開発環境へ戻る。

 

概要

 Office製品のExcelについてくるVBのエクセル専用言語です。Visual Basic for ApplicationでVBAです。Excelを起動しているときに「[Alt] + [F11]」を押すと、VBAを操るためのエディタVBE(Visual Basic Editor)が起動します。


 VBAによるプログラミングはエクセル側で利用するときは拡張を示唆する用語「マクロ」と呼ばれる機能として扱われるためVBAで作ったものはマクロと呼ばれます。ミクロ(小さなモノ)に対するマクロ(大きなモノ)の意味で、全体を操るという意味からマクロと呼んでいると思われます。Wikipediaでこういう怪しいことを書くと。上付き文字で[要確認]と書かれることでしょう。くわしいことは知りません。ここでは統一することなく、マクロといったりプログラムと呼んだりして、どちらの呼び方にも気をつかった立場をとります。


 シート毎のためのコードとして記述する部分。ワークブック全体のためのthisWorkBookコード部分。それから、追加で挿入するモジュールやクラスやユーザフォームがあります。


 VBEの左側に表示されているであろう「プロジェクトエクスプローラー」はツリー形式になっていて、現在、開いているエクセル文書全てをトップとする階層構造が表示されます。それぞれのワークブックのツリーを展開すると、Microsoft Excel Objectというフォルダの下を更に展開できて、そこに存在するシートが表示されます。このそれぞれをダブルクリックして表示されるプログラム入力Windowはシート用プログラム記述箇所で自分は「シートマクロ」と呼んでいます。そんな個人的な呼び方知りたくない?管理人と同じ呼び方してもいいんだよ。嫌?どっちにしても、このまま続けます。続行です。それで、シートが羅列されている一番下にはthisWorkBookという項目があって、これをダブルクリックして開くのがワークブック用プログラム記述箇所で自分は「ブックマクロ」と呼んでいます。


 シートマクロの特徴は、シートに不随するマクロで、例えばエクセル側シートをコピー&ペーストをしても、ついてくるマクロです。意図しているなら、一緒についてきてくれて有難う。ってなるし、意図していなければ、何じゃこれ。ムカつくになると思います。マクロを作った人がこのことを意識しているかどうかが分かれ目です。例えば、申請書のような文書で、入力がメンドクサイ様式の入力を楽にするためにマクロがあったとします。これが、シートマクロとして書かれていれば、申請書のシートを違う新しいブックに複製とかする手抜きの申請者がいたとしたら、シートにマクロがあるので、こういう手抜きをする人でも、問題なく申請書の様式チェックや、入力補助プログラムが動作するわけです。これをシートマクロ以外の部分に書いてしまうと様式チェックは崩壊し、入力補助のない怪しいブックが散在することになります。でもすべてをシートだけでやろうとするとまぁ疲れます。場合によっては使い方のルールを決めるしか無い状況になるかもしれません。マクロ作成者の腕の見せ所です。管理人は決して妥協することはありませんでした。


 ブックマクロにはブックに関する動作を記述します。保存とかをする前に動作するモノとかブックを開いたときに自動で動くとかです。クラウドのような場所にあるワークブックを開くときに、常に読み取り専用で開くを設定していて、ほんとうに編集したい人だけが書き込み専用で開いたりする運用にした場合は、開いたときに動くという動作は、書き込み専用で開くを押した時に動くため若干タイムラグがあります。小難しいことの多いのがブックマクロです。上記の読み取りで開くか、書き込みで開くかをほったらかしにしている人を検出するのは困難です。そのことを踏まえてプログラムしているかというエクセルの動きをしりつくしていない人が、適当にこういうプログラムをするとまぁハマります。こういうことをするときはもっと別の道を選択する必要があります。管理人は気が付いていましたが、知らないふりをする方です。どうせ運用なんて守られない。人間はミスをしたり、割り込み作業が発生したら、完全に忘れて、かさなったウィンドウの深層にダイアログが消えるのです。よくおこることです。そして、いろんな人に迷惑をかけたあげく知らないふりをして、そっと何もなかったことにしたりする。完全犯罪です。完全軽犯罪です。完全なる威力業務妨害隠匿行為。てんやわんやしている時間は貴重な無駄時間で、冷静になって考えると楽しい日常。こんなことでイライラしていたら愛を補充しまくらなければなりません。


 それから、よくやる方法としてブックの項目とか、ブックの中に出来上がったMicrosoft Excel Objectという項目とかを右クリックして表示されるコンテクストメニューから「挿入」-「モジュール」選択して作る「モジュールマクロ」。複数のシートにまたがった操作やありとあらゆる操作はここに書きます。マクロをいじらないユーザに消されることはないです。安心です。


 もうひとつは「挿入」-「クラス」の「クラスマクロ」です。これも管理人だけの呼び方です。クラス?メンドクセ。ほとんどクラスなんて作ったことないです。 そんなに何度も使うクラスなんて作る必要性はなかったりする。勉強用としては作りました。これはこれで便利です。Cppを主に触っているモノとしては、何がクラスなんだかよくわかりません。クラスっぽいことできる。みたいな。


 そして、「挿入」-「ユーザフォーム」です。これはダイアログを作る感じです。ダイアログにつけられたIDを呼び出す感じでダイアログを生成したり表示したり非表示にしたり消滅させたりして使います。呼び出したプログラムからダイアログの中の値にアクセスすることもできます。ユーザフォームは普通にダブルクリックするとダイアログのデザインをするためのウィンドウが開くだけですが、出来上がったユーザフォームを右クリックして表示されるコンテクストメニューの「コードを表示」からユーザフォームに付随するプログラムを記述するためのウィンドウが表示されます。これを管理人は「ユーザフォームマクロ」と呼びます。


 これらを使って、エクセルをなるべく簡潔かつ完璧あるいは創造性豊かにありとあらゆるデータを有意義にあやつることを目指すプログラムです。


環境設定

 VBA VBEの環境設定 フォントにConsolas英数字+メイリオ等幅(MeiryoKe_630r1.ttc,MeiryoKe_Console)

 

言語と開発環境へ戻る。