AccessVBAベーシックの公式テキストの特徴

もう7月の半ばであり、暑い日が続いています。ここ数日は40度を越える所も出てきて、熱中症で倒れてしまった人も多いようです。そんな日はこまめな水分補給をとったり、涼しい室内に引きこもる方が安全です。

 

最近はAccessVBAベーシックの公式テキスト『VBAエキスパート公式テキスト AccessVBAベーシック』を読んでいました。AccessVBAとはマイクロソフトのOfficesoftであるAccessに搭載されているプログラミング言語です。

 

いろいろな目的からAccessVBAについて勉強してきましたが、もうそろそろきりが良さそうなので、本書について備忘録や自分が理解することも兼ねてまとめていってみたいと思います。

最初の150ページぐらいはExcelVBAの復習という感じ

『VBAエキスパート公式テキスト AccessVBAベーシック』は、最初の説明文のページを除いた全体のページ数は約320ページほどあります。ちなみに『VBAエキスパート公式テキスト ExcelVBAベーシック』だと約240ページ程のボリュームになります。

 

約80ページの差がありますが、この差はなんなのでしょうか?AccessVBAはExcelVBAよりも難しいイメージがあるので、難易度的にAccessVBAの方が難しいから、その分AccessVBA専用の難しい関数やステートメントが多くあるということなのでしょうか。

 

AccessVBAはAccessVBAの内容だけでこのページ数だけかというと、そんなことはありません。自分の見た感じだとAccessVBAベーシックのテキストのうちの最初の150ページ程は、ExcelVBAの公式テキストに記載されていた内容と結構重なります。ExcelVBAの復習と言ってもいいかもしれません。

 

例えば、本書の構成において第1章の「VBAの基礎知識」では「モジュール」や「プロシージャ」「オブジェクト」といった基礎的な内容が中心です。第2章の「データベースの基礎知識」はAccessVBAではなく、まだAccessの基本的な内容や操作方法といった感じです。

 

第3章が「変数・定数・配列」で第4章が「ステートメント」、第5章が「関数」です。全部が全部ExcelVBAの内容と重なるわけではなく、一部は本書の内容から初めて見る関数もあります。

 

例えばテーブルやクエリの、あるフィールドに対する合計値を返す「DSum関数」やNull値を指定した値に変換するNz関数など、他にもAccessVBAから初めて見る関数はいくつも出てきます。

 

また、ExcelVBAと重なる部分が多いと言っても、ExcelVBAとは若干違った角度から勉強できる感じなので、復習も兼ねられるし新たな気づきも得られました。

DoCmdオブジェクト

ここからやっとAccessVBAらしくなってきて、本書の第6章からDoCmdオブジェクトというものが出てきます。

 

Accessにはテーブルやクエリ、フォームやレポート、その他コントロールやリストボックス、コンボボックスなど様々なデータベースオブジェクトが存在します。そのようなデータベースオブジェクトをまとめて操作・制御できるオブジェクトが「DoCmdオブジェクト」になります。

 

DoCmdオブジェクトの書式は以下のような形になります。

DoCmd.メソッド 引数1,引数2・・・

自分は最初、ここで戸惑いました。一般的にオブジェクトというと、レポートとかコントロールとか目に見える「モノ」を指します。しかし、DoCmdオブジェクトはレポートやフォームを「操作・制御」するための「動作」のオブジェクトなので目に見えません。

 

もう少し別の形で表現すると、「モノのオブジェクトと動作を橋渡しするためのオブジェクト」といった言い方もできるかもしれません。これは自分なりに理解するための解釈なんですが、通常のオブジェクトとは別のオブジェクトと考えた方が理解しやすいと思います。

 

DoCmdオブジェクトのもうひとつの特徴としては「マクロ機能の代替」である、ということです。『これ一冊で完璧! AccessVBA即戦力講座』には次のように書かれています。

p.133

DoCmdオブジェクトの限界

DoCmdオブジェクトに用意されている命令は、あくまでマクロ機能をVBAで実行するためのものですから、それ以上のことはできません。例えば、クエリの結果で得られたデータ1つ1つに対して、更にチェックするとか、条件に合ったものの集計をするといった細かい処理はできません。

Accessにおけるマクロは、マクロビルダーなどを通してドロップダウンから必要なアクションを選択していくという形でプログラムをつくることができます。VBAのように英語の難しいコードを覚える必要はなく、ブロックを積み上げていくように直感的にプログラムを組み立てていけます。

 

デメリットとしてはレコード単位やデータ1つ1つに対してチェックができないなど、マクロだけでは細かい操作ができません。つまりマクロの代替機能であるDoCmdオブジェクトだけでは細かい操作は難しいということです。

 

そういったことから「データベースの接続」とか「DAO」「ADO」といった言葉が出てくるのですが、これはAccessVBAスタンダードの範囲になるので、また機会があったらこの部分に触れていきたいと思います。

コメント