<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
  Ac2002--VBAの沼 > はじめに



VBAとは

VBAとはVisual Basic for Applicationの略。
Basicというコンピュータ言語をよりビジュアルに扱えるように工夫された、Visual Basicという言語(Microsoftが売ってる開発ソフトの名称)にさらに手を加え、MS-ExcelやMS-Access、MS-WordなどMicrosoftのOffice系ソフト専用に改良されたコンピュータ言語です。
ですので、MS-Accessの機能かというと、そういうわけでもなく、でも、MS-AccessでBasicによるプログラミングができるように多少手を加えられたものでもあるので、MS-Accessの機能と言えないこともないかな・・という感じ。
まあーーこういうところをもっと詳しく専門的にしっかり理解したいのであれば、もっと専門的な本を読んだほうがいいかも。

具体的にどういうときに必要になるかというと、必要になることなんてありません
なくてもいいもんです。
使わなきゃ使わないで、やりようはいくらでもあります。

最近では、MS-Access初級者向きの入門書とかでも、けっこうVBAによるコードを示したもの、多いみたいですね。
絶対不可欠というものでもないんですよ。「VBA=上級者」という構図も、存在しません。
難しいと思い始めたら、多分使いこなすことはできないと思う。
でも、基礎も何もない状態で、本に書いてある通りに丸写しサル真似な使い方をしていると、結構危険なものでもあるのです。

MS-Officeのユーザー数ってかなりの数だと思うんで、本屋さんに行けば、まるまる書き写せば使えるお役立ちサンプルコード集なんかいっぱい売ってて、情報は充実してると思います。でもそれは、まるまる丸写ししていれば、の話です。
自分のデータベースに合わせて書き換えて使いたいと思っても、どこをいじっていいのかわからないで、適当にいじったらわけがわかんなくなって・・・わけわかんなくなるのはアタリマエです。
やっぱり、少しは基礎が必要です。

この講座では、「市販の入門書を読むための、さらに基礎知識」についてお話していきます。
なんかーーーーーー「おいおい、そんなしょぼい企画なのかよ!」って声が聞こえてきそうですが(笑)、でも、せっかくだから、本屋さんに売ってるサンプルコード集とか、うまく活用してオシゴトに取り入れていきたいっって、思いません?
ガンバリマショウ。



VBA or Macro???

「VBAって覚えておいたほうがいいですか?」という疑問は、「フランス語は覚えておいたほうがいいですか?」という疑問とおんなじようなもんです。
必要ない人もいっぱいいるだろうし、必要ないけど勉強しようと思い立って学校に通いだす人もいるかもしれない。絶対必要な人もいるかもしれないし、自分は話せないけど他の人に翻訳してもらったり話せる人を雇ったり何かしら対処をしている人もいるだろうし。

「マクロでやったほうがいいのですか?それともVBAでやるべきでしょうか」という疑問は、「ご飯は、箸で食べるべきですか?それともフォークを使ったほうがいいのでしょうか」という疑問とおんなじようなもんです。
どっちだって食えるだろ!!自分で決めろよ!!!・・・見る人が見れば、そうツッコミが入ります。
でも、中には、箸では食べにくいおかずも出てくるかもしれないし、フォークを置いてないお店とかもあるかもしれない。
フォークがないのなら、他の方法で食べればいいんじゃないですかね。最終的には手づかみだって何とかなるでしょう。

VBAというと、なんだか魔法の玉手箱みたいなものを想像する人もいるんですけども、MS-Accessでデータベースを作成するための単なる「手段」のひとつに過ぎません。「VBAを使えばできるような気がするんですけど・・・」って言う人たまにいますけども、その根拠はなんなんスかね???
「電車を使えば行けるような気がするんですけど・・・」っていきなり言われても、「どこへ!」「いつ!」「あんた今どこにいるの!」ってことがぜんぜんわかんない状態では、果たして電車で行けるもんか行けないもんか、誰にも分からんでしょう。
VBAを使えばできる、なんて考え方は単なる妄想です。
相手はコンピュータなんですから、根拠のない妙な期待は捨てるべきかもしれないですネ。



「プログラミング」とは何か

VBAとは、先にも述べましたように、コンピュータ言語です。
当然、プログラミングの知識が必要になります。
コンピュータ言語というのは、「コンピュータへ命令をするための言葉」です。
コンピュータって、どういう仕組みで動いてると思います?


ほら、むこうの山の上に稲垣さんがいるのが見えるでしょう。え?見えない?いいえ、見えてます

遠いので、稲垣さんが何を言おうとしているのかわかりません。ぜんぜん聞こえません。
そこで、手を上げたり下げたりすることで、物事を伝えられるよう、あらかじめ約束事を決めておくことにしました。

  手を上げる <腹が減った
  手を下げる <満腹

・・これでは、2種類のことしか伝えられません。

そこで、手を上げたり下げたりの動作を8回で1セットとして、たくさんのことを伝えられるように考えました。

  上上上上上上上上 <あ
  上上上上上上上下 <い
  上上上上上上下上 <う
  上上上上上下上上 <え
       ・
       ・
       ・

8回の上げ下げでできる組み合わせは256通り(多分)ありますね。
皆さんの手元のキーボード、キーがいくつあります?109型キーボードをお使いの方でしたら、109個ありますよね。
でも、ファンクションキーとかCtrlキーとか、文字とは関係ないキーもあるから、そういうの差っぴいても、256通りの表現方法があれば、そこそこ情報の伝達には使えるんじゃないですかね。

   「らーめんたべたい」 

と伝えたかったら、8×8で64回、手を上げ下げすればいいわけです。

   「ちょうしがわるいのでしごとをやすみます」

と伝えたかったら、8×19で・・・152回、手を上げ下げすれば伝えることができます。

と、こうやって1文字ずつ動作を割り当てておけば、日本語だったら、ひらがなが伝えられれば、会話を伝え合うことはできるはず。
相当な回数の手の上げ下げをしないとならないですけどね。

コンピュータとわたしたちも、実は遠く遠く離れていて、お互いの声は聞こえません。
っていうか、話通じないんです。
なので、なんかしら予め、「コンピュータと会話をするために取り決め」をしておかないとなりません。
「メモリ」ってところに、すっごいちっさい電球が何十億個も何百億個もあると思ってください。
電球はそれぞれ、ついたり消えたりします。
さっき稲垣さんと手の上げ下げだけで物事を伝え合ったように、コンピュータも、自分の脳みその中で「手の上げ下げ(電球をつけたり消したり)します。
こうやって、単純な作業を相当回数繰り返すことで、複雑な処理をこなすのです。

(意味なし)

こんな話をすると、なんかもんのすごくどんくさい感じがしますけども、だからこそ、「CPUの処理速度は速いほうがいい」「メモリはいっぱいついてたほうがいい」という結論に達するわけですよ。ご心配には及びません。1秒間に相当な数の電球を見ることができるんです。コンピュータって。
CPUの処理速度ってのは、ぶっちゃけた話、電球がついてるか消えてるかを1秒間に何個くらい見れるか、ってことです。

コンピュータはそれでいいんですけども、では、わたしたちは・・・。
0と1しかわかんないコンピュータに、わたしたちも0と1で命令を下すかっていうと、まあーーーーーやってできないことはないかもしれないですが・・。
みなさん、1秒間に何億個も電球つけたり消したりできます?
わたしゃあどんなにがんばっても、せいぜい3つくらいかな・・・。
わたしたちは、コンピュータと同じようにはできないですよね。

じゃあ、どうすればいいかといいますと・・・。
コンピュータにも多少歩み寄ってもらって、お互いに意思の疎通が取れる「言葉」を使います。
といっても、コンピュータには相変わらず0と1しかわかんないので、私たちの言ってることを0と1に置き換えて処理してもらって、その結果をまた私たちにわかるような言葉で画面に返してもらうように、って感じです。そこで、わたしたちが、コンピュータに何か伝えるために、コンピュータから何か結果を得るために使う言葉のことを「コンピュータ言語(プログラミング言語と言うほうがいいのかも)」というわけです。



「プログラミング」のときに、どういうことをやるのかというと

プログラミングのイメージとしては、まず、プログラミング言語を使って、処理の手順を書きます。
これを「ソース」といいます。とんかつにかけるソース(sauce)じゃなくて、source(源、っていう意味)です。
ソースファイルとかソースプログラムとかいろんな言い回しをすることがありますね。コンピュータ言語の種類とか、業界とかでも用語の使い方は若干違うかと思います。
また、ソースって言葉じゃなくて、「コード」って言葉を頻繁に使う場合もあります。わたしは「コードを書く」って言っちゃうことのが多いかな・・・。
ソースは、その言語専用のエディタとか、なんかしらソフトウェアを使って作ることもあるし、メモ帳みたいな一般的なエディタを使って作ってしまうこともあります。なので、「ソースを書く」なんて言い方をすることもあります。
まあーーーー言語によっていろいろですね。


「このとおりにコンピュータが仕事してくれればしめしめ」というソースが出来上がったら、こいつを「コンパイル」します。
コンピュータにわかる言葉にしてもらうわけです。
この時点で必ずしも0と1になってるわけじゃなさそうですが、まあとにかく、わたしたちにはわからない言葉に書き換わったものができあがります。


これも言語によって具体的なやり方や仕組みはまちまちなんですが、コンパイラと呼ばれるソフトウェアとか、なんかしらそういう能力のある機能とか使ってコンパイルします。で、コンパイルした結果は、これまた言語によってまちまちなんですけども、xxx.exeとかいう拡張子のついたファイルになったり、画面のどっかをクリックしたらぱーーーっと実行が始まるような、そういった類の「プログラム」になるわけです。

ソースがプログラムに置き換わるのではなくて、ソースを元にしてプログラムファイルなどが新しく作成される、といった感じですね。
どっかしら、処理に問題があったりして芳しくないときは、まずソースファイルを修正して、再度コンパイルして、再度プログラムファイルをこしらえます。これを繰り返すことが、いわゆる「プログラミング」なのです。



VBAを習得するためには

VBAの場合は、コンパイラとかソースエディタとかそういうもんが全部MS-Accessの中に入ってるわけなので、少し使い勝手がよくなってます(と私は思う。上を見たらキリがないよぅ)。

最近は、大げさなことをしなくても、もっと手軽に取り組める言語(広い意味で考えれば、ホームページを作るためのHTMLとかJavaScriptなんかもプログラミング言語ですしね)も増えてきてます。それだけ、「出来合いのソフト」を使うだけでなく、「処理を自作する、する必要がある、できれば自作していきたい」という需要が、増えてきているのかもしれません。
少なくともVBAは、ソースさえ正しくかければ、コンパイラだの実行プログラムだのとこまごま管理しなくてもよいようにはなってます。また、ソースを書く際も、専用のエディタがあって、エディタの中にはお助け機能が用意されているので、エディタの使い方をマスターすれば、VBAそのものにはあんまり詳しくなくても、ある程度のプログラムは作れるようになると思います。

もちろん、詳しいにこしたことはないですけど・・・。でも、ある程度基本がクリアできてれば、後は参考になる本とかサンプル集とかを応用することはできると思うんです。その、「基本」ってとこが、なかなかとっつきにくいのかもしれないですけれどもね・・・。
でも、そういうわけで、VBAっつっても、何でも実現できる玉手箱じゃあなくて、「苦労すればできないこともないけれど、何もしないと何もできない」ってことです。
「VBAを使えば高度なデータベースが作れる」というわけのわかんない妄想は捨てること。
これがまず、VBA習得のための第一歩です。夢は抱いていたいけど、現実はもっとシビアです。

それと・・・。
VBAだけ覚えようとしても、それは無理です。
VBAの「A」は何なのか・・・Applicationの「A」です。
MS-Accessの中のVBAなら、MS-Accessの中で動くためのプログラム言語なので、MS-Accessのことをちゃんと知っておかないと、本末転倒です。

どういうデータベースが必要なのか日常の業務分析がしっかりできてて、仕事のないように合ったテーブルがしっかりできていて、必要なデータがきちんと蓄積されて、見やすいフォームやレポートができて、必要なデータを取り出すクエリがいろいろできて・・・それらをより使いやすく分かりやすくするために工夫するときに・・・そこで初めて、VBAで処理を作ろうかな、という発想にたどり着く。そういうもんです。

なので、テーブルとか、クエリとか、そういうもんの役割や仕組みをしっかり理解した上でないと、VBAの書き方だけ覚えても何の役にも立たないのだと、そう思ってください。