ExcelVBAとAccessVBAの「できること」の違いについての所感

ExcelVBAとAccessVBAの「できること」の違いについての所感

以前書いた記事(ExcelとAccessのマクロとVBAの違いについての所感)が検索などから多くの方に読んでいただいているみたいなのです。ありがとうございます。自分にしか需要がないかと思っていたのでとても嬉しいです。

そこで、もうちょっと別の角度からもどう違うのかということも書いてみようかと思いました。興味のある方は併せて読んでいただけたらよいかもしれません。


まず結論

ExcelVBAとAccessVBAは違うのか? ということに対しての私見は、

  • 言語としてのコードの書き方は同じ
  • できることは全然違う

です。なぜ違うのかというのは、そのソフトでできることが違うからです。

VBAという言語の基本的な書き方

VBA(Visual Basic for Application というプログラム言語)は、とてもざっくりと書くと以下のようなルールです。

ExcelでもAccessでも、WordやPowerPointなどでもVBAという言語を使った書き方は変わりません。ここが、同じ部分です。

ではなにが違うのかというと、作用させるオブジェクトが違うのです。

オブジェクトというのは、この記事では便宜上、「メソッド(働き)」や「プロパティ(属性)」を適用させたい対象としておきます。

オブジェクトが違えば、できることも違う

たとえば、「歩く」というメソッド(働き)の対象が、以下のようなオブジェクトだったらどうでしょうか。

一般論としてですが、スマートフォンには歩くという機能が備わっておらず、ネコチャンには備わっています。

では、「色」というプロパティ(属性)だったらどうでしょう。

スマートフォンにはカラーバリエーションがありますが、ネコチャンは赤くはなりませんよね。

このように、オブジェクトに対して備わっているメソッドやプロパティを書かないといけません。

(上級者向けになりますが、メソッドやプロパティは自作することもできます。初心者さんは、まずはあらかじめ備わっているものを使えるようになれたら良いと思います。)

ExcelとAccessではソフトの目的が違う

Excelで代表的なオブジェクトといえば、「シート」または「セル」から始める人が多いと思います。

比較するとAccessは作用させたい対象が多いので、どの「オブジェクト」に「なに」をさせたいのか、というところから始まります。

私の感覚では、テーブル、レポート、フォームなどのオブジェクトのうち、入門として始めたい対象は「フォーム」だと思います。「フォーム」上の「コントロール」をどのように動かしたいか、ということを考えます。コントロールと一言でくくっても、その種類はテキストボックス、コンボボックス、ラベル、コマンドボタン、などなどなどたくさんありますよね。

オブジェクトが違えば、備わっている命令は違います。たとえば「選択する」という意味のメソッド(働き)を適用しようとしても、

  • Excelのセルに対して → Range(“A1”).Select
  • Accessのコンボボックスに対して → Combobox.SetFocas

このように書き方が異なります。そのオブジェクトに適した命令を書かないといけません。

そのオブジェクトの形、使われ方、特性、そういったものへの理解がまず必要になるのです。Accessにおいては、データベースの知識もなくてはいけません。「このオブジェクトを〇〇させたい」という具体的で明確な目的があって、その目的を達成するために適したコードを書くのです。

したがって、

  • 言語としてのコードの書き方は同じ
  • できることは全然違う

ということになるわけです。

大事なのは、そのソフト(Excel/Access)を使って最終的に成し遂げたい結果はなにか、ということです。

Excelは表計算ソフト、Accessはデータベースソフトなので、そもそも「目的」が全然違います。おのずとして、VBAの「書き方」は同じでも、「なにをするのか」は変わりますよね。

AccessVBAのほうが難しいの?

これはよく聞かれることなのですが、私見としては、同じ言語なので難易度は変わらないと思っています。ただ、ExcelとAccessでは必要な知識量が大きく異なると思います。

具体的に言うと、Excelはシートとセルだけ操作すればとりあえずは目的達成できる(乱暴な言い方ですが)場合が多いですが、Accessはデータベースの知識、主要オブジェクト(テーブル、クエリ、フォーム、レポート)の知識、コントロールの知識など、総合的に知っていないと「なにをどのように動かすのか」ということがわからないので、コードが書けないのです。

後述しますが、ExcelVBAでもユーザーフォームを駆使して複雑なことをやろうと思えば、AccessVBAと同じくらい知識量が必要になると感じています。

Excelにもユーザーフォームがある

Excelはシートやセルを操作するだけでなく、ユーザーフォームという独自のウィンドウを作成する機能を持っています。これを使うとExcelだけでも独自アプリのような体裁のものが自作できます。

これを作ろうとすると、ユーザーフォーム、テキストボックス、コンボボックス、ラベル、コマンドボタン、などなどたくさんのオブジェクトを使うことになるので、覚えなきゃいけないことは増えますが、シートやセルだけを使っていたときよりも可能性が広がって面白いと思います。

最後に自著の宣伝になってしまって申し訳ありませんが、アプリ作成をしながらExcelVBAとユーザーフォームを勉強する本も書いておりますので、興味のある方は覗いてみてくださいね!

公開日:2020/11/22

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)