● Access2000VBA・Excel2000VBA独学~VBAプログラミングとはどんなプログラミング方式なのか?(簡易版)
※2018/09/28 追記
新しく、更に詳しく、図式化・一覧にしてみました。近いうちに記事にもします。
こちらの一覧で、まずは「プログラミングとは、どんなプログラミング言語であっても、”変数”と呼ばれるものを動かすことで”自動化”を実現する作業である・・・」ということを知っていただけたらと思います。
そしてVBAの場合は、その”変数”を動かす方法には2つあって、「一般データと一般変数」を操作する方法と、「オブジェクトとオブジェクト変数」を操作する方法、があるということ、それから「実際にはその混合形がほとんど」、ということを感じ取っていただけたら幸いです。
============
以下、本文です。
昔、メルマガを書いていたころに書いたものが見つかったので、「VBAプログラミングとはどんなプログラミング方式なの?」という問いに対する簡易的な回答として、こちらに載せさせていただきます。
「● Access2000VBA・Excel2000VBA独学~VBAプログラミングとはどんなプログラミング方式なのか?(巷では個々の細かい用語の説明ばかりで、全体像としては、意外と短くはまとめられていないこと)」https://euc-access-excel-db.com/tips/ct07_se/ct075010_ac2ktips/access2000excel2000-what-vba が、かなり長いので、それをコンパクトにして、もう少し全体をつかみやすくしたもの・・・・とお考え下さい。(そういうつもりです。もしそうなっていなかったらごめんなさい。(^^))
この記事の本文は、15年前に出していたメルマガに書いた内容に、ほんの少し「ステートメント」という単語だけを追加したものです。(ステートメントの意味は書いてありません。当時は書かなかったので。)
当時から「VBAとは?」に関する考え方はほとんど変わっていません。
そして自分のVBA体験にもとづき、また、自分に都合よく、パソコン用語・VBA用語を意訳しまくっています。かつ、高度なことは何一つしていません。ほとんどIf文しか使ってないです。
でも、自力で、VBA用語を意訳したことで、ExcelやAccessのヘルプもそこそこ読めるようになりました。
僕が書く程度のプログラムなら(ほとんどIf文しか使ってないので。でもAccessでもExcelでもバーコードPOSレジ程度なら十分作れますので。)、誰にでも書けますので、どうかこれで皆さんも「ヘルプ」を自力で読めるようになってください。
これからVBAに挑戦してみたい方は、ここからスタートして、是非、がんばってください。
関連記事として、VBAで「最も重要」と考えてもいい、「オブジェクト」の「参照」について書いた記事もご紹介しておきます。途中脱線して一見無関係な記述が多いですが、「なぜ皆さんが挫折しやすいのかの意外と原因にもなっていること」やかなり重要なことも書いていますので、どうかお読みになってみてください。
[★ AccessやExcel等のVBAの独学に最も重要!!] とりあえず Access2000 で、テキストボックスやフォーム、サブフォーム、レポート、サブレポート、その他、等々を「参照」したいときのプログラムコードの書き方(参照方法)と重要注意事項
https://euc-access-excel-db.com/tips/ct07_se/ct075010_ac2ktips/ctl-etc-reference
では、以降、本文です。
===========================
○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●
服屋が書く!ACCESS2000・POSレジ自作講座!
Vol.30 H14/02/21
○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●
************************************************************
おまけ ~ VBAプログラミングってどんな感じ?
(オブジェクト、プロパティ、メソッド、関数、イベントなど)
~目次~
●VBAってどんなプログラミング方式なの?
●オブジェクトって何?
●プロパティって何?
●メソッドって何?
●関数って何?
●最初に戻って…
●初心者の方へ
ヘルプを少しでも理解できるようになるために
************************************************************
今日は、「VBAって、バクっととらえるとどんな感じのプログラミング方式なの?」ということについて少しだけお話したいと思います。
これは前に数回、VBAコードの説明をしましたが、「聞きなれない単語がいろいろ出てきて整理しづらいんじゃないかな~?」と思ったためです。
というわけで、僕のこじ付けですみませんが、初心者の方のためにVBAというものを「ばくっと」ご説明いたします。
●VBAってどんなプログラミング方式なの?
僕は以下のようにとらえてます。(ヘルプ無視?(笑))
********************
「VBAプログラミング」とは、
「オブジェクト」に、
「プロパティ」を与え、
そのオブジェクトを、「メソッド」 や「関数」、「ステートメント」等々の「命令語たち」にて動かします。
そして各プログラムを自動実行させるタイミングについては、「イベント」というものを使います。
そういうプログラミング方式です。
(※ オブジェクトを操作することが多いですけど、もちろん操作せず文字操作などだけで終わることも多いです。)
********************
以上です。
えっと…もう少し具体的に説明しますと…、
・「オブジェクト」に「プロパティ設定」をすることによって、
・「オブジェクト」に性質や動作特性または動作上の制約等を与え、そのあと、
・その「オブジェクト」の場合なら、「メソッド」や「ステートメント」「列挙(Enum)」「定数」といった命令語たちを使って・・・、
・また、「文字列や数値」の場合なら、「関数」や「ステートメント」「各種演算子」といった命令語たちを使って・・・、
・思い通りに動かす・・・、
・そういうプログラミング方式・・・。
(大雑把なイメージとしては、「動かす対象」は「オブジェクト」か「文字列や数値」かのいずれか、というイメージです。)
そんな感じでしょうか。
(xx)・・・結局余計にわけわからなくしただけかもですね。すみません。
では、もう少し具体的に「オブジェクト」「プロパティ」「メソッド」「関数」などを見ていきましょう。
●オブジェクトって何?
前もこんなこと書いたような気がしますが、また書きます(笑)。
くどくてすみません。
僕は「オブジェクト」を以下のようにとらえています。
・道具、操作対象物、機能、システム、ユニット
・命令を与えることによって、何かしらの動作が可能な「モノ」
・かなりの昔の文字ばかりの「キャラクタ(文字)」ベースでのプログラミングに対して、その反対側に位置するものとしての・・・、「部品」ベース(「モノ」ベース、「ユニット」ベース)でのプログラミング・・・という意味あいでの「オブジェクト」。
別の言い方をすると「キャラクタ」の対義語のような言葉としての「オブジェクト」。
例えばこれを実生活にあてはめてみると「車、飛行機、トンカチ、ドリル、キリ…」なんかは「オブジェクト」って感じです。(じゃあ「キャラクタ」は何?と聞かれると答えられないのですが・・・(^^))
Accessの場合なら「エラー検出機能、DAO機能、表(テーブル)、図(グラフ・絵)」 などです。
余談ですが…
僕自身は「動物」や「人間」「ヨメ」「子供」のように「意志」を持つものは「オブジェクトじゃない」ととらえています。「命令どおりに動かないから」「勝手に動きやがるから」です。(笑)
基本的に「オブジェクト」とは命令どおりに動く(使える)「物」、「道具」、「機能」のことだと考えています。
※↑これを書いたころは、まだ何もわかっていないバカでした。お若い方がにおかれましてはどうか、このような人間になりませんように・・・。
なお、「機能」も「オブジェクト」の対象と考えていますから、それからすれば、
「必ずしも目に見える物だけがオブジェクトではない」
と言えます。
目には見えないハードディスクの中にあるだけの機能・データでも、それがある機能を有していれば、または、動作・操作可能な「ユニット」であればそれは「オブジェクト」と理解していいと思います。
DAOやADO、またはその中の各種機能などがその類です。
(実際にはDLLやOCXファイルなどが機能を担当してるんでしょうけど…)
また、もう少し広義に、「Windows」内で考えると、ウィンドウそのものやボタン、ダイアログボックス、アイコン、ファイル、みんな「オブジェクト」の仲間です。
なのでWindowsは「オブジェクトが集まってできている」という感じです。
Accessのヘルプでは「機能」もしくは「ユニット」と訳すとしっくり来る場合が多い…と感じています。
ヘルプに「~オブジェクト」と書いてあったら、「ははぁ…なんだかよくわからんがコイツはとにかく何らかの操作ができるらしい…」と思ってください。
●プロパティって何?
直訳は「特性」とか、「性質」なんて意味だそうですが、僕自身はプロパティとは、
「オブジェクトの持つ性質のこと」
ととらえています。
例えば、色、硬さ、速さ、長さ、温度、大きさ、番号、などです。
前項で挙げた実生活でのオブジェクトに当てはめてみると…、
・車の色
・タイヤの硬さ
・翼の長さ
・トンカチの温度・硬さ など
なんかが「プロパティ」ということになりますでしょうか…
Accessの場合なら…、
・エラーの種類を区別する番号
・文字の色
・文字の大きさ
・線の長さ
・表の色
・図の大きさ(縦横の長さ)
・使用可能かどうかの可否 など
という感じです。
(エラーの話は厳密には間違いかも…これまたごめんなさい!)
なお、プログラミング中には、オブジェクトのプロパティ設定をしないことが多いですが、その場合は、そのオブジェクトの「プロパティの既定値」が自動的に使われていると思ってください。
ユーザーがあえて指定しなくても…、「オブジェクトが動作する為に必要な、最低限のプロパティ」は、あらかじめ設定されているとお考えください。
●メソッドって何?
メソッドの直訳は「方法」「方式」「筋道」ということだそうですが、これついては以下のように理解してます。
メソッドとは…
・オブジェクトを動かすための命令の一種。動作命令。
・オブジェクトによって使えるメソッド(=命令)・使えないメソッドが区別・限定されている。
・オブジェクト毎にあらかじめ決められた動作。あくまでも”動作”で、設定・性質ではない。
・メソッドは「文字列や数値」を直接は扱えない(=動かせない=加工・操作・判定等ができない)。それをしたければ「関数」でやる。メソッドが動かせるのは原則は「オブジェクト」のみ。
メソッドの例は…
実生活に関連するものなら…
・走らせる/走らせろ、
・飛ばす/飛ばせろ、
・くぎを打たせる/くぎを打たせろ、
・穴をあけさせる/穴あけろ、 など
Access関連では…
・エラー番号を表示させる/エラー番号を出せ、
・データにアクセスし加工・削除等させる/
データにアクセスし加工・削除等しろ
・レコードの移動、
・レコードのロック、 など
例えば車は「走らせる」ことはできますが、「飛ばせる」ことはできません。飛行機なら「飛ばす」ことはできますが「(海中を)潜る」ことはできません。
よってこの場合、「飛ばす」というメソッド(命令)は「飛行機にしか」適用されない命令だといえます。
逆に、、「穴をあける」というのはドリルにもキリにもできます。ですので、「穴をあけさせる」というメソッドはキリ、ドリル、共通で使えるメソッド(命令)だといえます。
同じようにAccessのオブジェクトにも適用される(あらかじめ用意されている)メソッド(命令)が異なります。
●関数って何?
関数は「自動販売機みたいな」”命令の一種”です。
オブジェクトを動かすことはできないのですが、文字列操作や計算に特化した命令・・・、みたいな感じです。
「文字や数値」を動かす(=操作・加工・判定等々をする)ことに特化した命令・・・、みたいな感じです。
(ただ、ファイルの名前やフルパスを取得するといった、「オブジェクトのプロパティの値を取得する」というような感じのことは多少はできます。ただし、基本、メソッドのように直接オブジェクトを動かしたりはできません。DoEvents関数のようなそれっぽいものも一応はありますが、ほんの一部です。)
自動販売機は120円入れると、ジュースが「ガチャコン!」と出てきますが、要は「入れたものを」「内部で変換・加工等して」「違うものを出してくれる」機械です。
関数もこれに似ていて、「ある数値や文字列、変数などを与えると」「内部で変換・加工等して」「違うものを吐き出してくれる」命令です。
まあ、「関数」と呼ぶよりは「値を自動加工する命令(群)」とか「値を自動加工する式のあつまり」などという意味から、「値自動加工命令(群)」とか「値自動加工式(群)」なんて呼んだほうがイメージしやすいかも知れません。
なお、”群”と書いているのは、通常関数はユーザーの自由に自作ができるんですが、そのとき1つの関数の中には複数の命令や式を書き込むからです。つまり命令や式のあつまりという意味で”群”と書いています。
いちばん簡単な「関数」の例を挙げましょう。
「Z」という名前の自動販売機の中に「Z=X+Y」という式が入っていたとしましょう(現実にはそんなもんありえませんが、たとえ話ということで…)
その自動販売機に「X」を「1」、「Y」を「2」、としてチャリンチャリンと入れたとします。
すると自動販売機「Z]からは「3」というジュースがガコーン!!と出てきます。
こんな感じです。イメージできましたでしょうか?
この場合、自動販売機に投げつけるXやYの値のことを「引数(ひきすう)」と呼びます。
また、この例では「Z=X+Y」という1つの式しか使いませんでしたが、実際には、もっといろいろな命令や式を複数行書きます。
実際の「関数」の例では…、
・あるいくつかの文字列を投げかけるとそれを結合してくれるものや、
・反対に、ちょん切ってバラバラにしてくれるもの、
・そのほか、日付データを投げつけると、月単位や曜日、時間単位に
変換表示してくれるもの
などがあります。
関数についてはこんな感じです。
●最初に戻って…
それでは冒頭の「VBAってどんなプログラミング方式なの?」の項で説明した…、
********************
「VBAプログラミング」とは、
「オブジェクト」に、
「プロパティ」を与え、
「メソッド」や「関数」、「ステートメント」などの「命令たち」で具体的に動かす。
そして各プログラムを自動実行させるタイミングについては、「イベント」というものを使います。
そういう、プログラミング方式である。
あるいは、もう少し細かく言うと・・・
・「オブジェクト」に「プロパティ設定」をすることによって、
・「オブジェクト」に性質や動作特性または動作上の制約等を与え、
・そのあと、その「オブジェクト」を、「メソッド」や「ステートメント」といった命令語たちを使って・・・、
・あるいは、文字列や数値を、「関数」や「ステートメント」といった命令語たちを使って、
・思い通りに動かす・・・、
・そういうプログラミング方式・・・。
このとき、
「オブジェクト」は、基本的には「メソッド」や「ステートメント」で動かし、
「文字列や数値」は、基本的には「関数」やこれまた「ステートメント」で動かします。
(基本的には、「関数」ではオブジェクトを動かせません。同様に、「メソッド」では文字列や数値を切ったり貼ったり具体計算したり、といったことはできません。「ステートメント」は公用的な感じで、「分岐や繰り返し・停止・始動・エラー発生時の分岐処理、変数設定、等々」といった感じの命令なので、両方に使えます。)
(大雑把なイメージとしては、「動かす対象」は「オブジェクト」か「文字列や数値」かのいずれか、というイメージです。)
という感じ・・・
********************
ということについてもう一度考えてみましょう。
車の例でいうと、次のようになると思います。
例えば「車を黒色にして、時速30Kmで走らせろ。」という命令を実行
した場合…、
・「オブジェクト」=車
・「プロパティ」= ”黒色にして、”と、”時速30Kmで、”
・「メソッド」= 走らせろ
ということになると思います。
(これをはじめに説明すればよかったですかね…)
VBAプログラミングがどんなプログラミング方式なのかおおざっぱに理解できましたでしょうか?
で、実際にプログラミングをしてますと、
・「オブジェクト(機能・道具)」に「プロパティ設定」をすることによって、
・「オブジェクト」に性質や動作特性または動作上の制約等を与え、
・ そのあと、その「オブジェクト」を「メソッド」や「関数」「ステートメント」
という命令を使って思い通りに動かす…
という感じなんです。
●イベントって何?
僕のこじつけですみませんが、イベントとは…
・「何らかのプログラムが実行可能だよ!」という「合図(=信号)」
・「プログラムを実行可能な瞬間」
・「プログラムを実行可能なポイント」
・「プログラムを実行可能なスペース」
・「プログラムを自動起動させるためのきっかけ・合図」
という感じでしょうか?
イベントは、VBAプログラムの中に含まれる「イベントプロシージャ」というタイプのプログラムが実行されるための、「引き金(トリガ)」の役割を果たします。
イベント(Event)の直訳は「出来事」とか「イベントごと」「なりゆき」「結果事象」ということですが、VBAの「イベント」には直接これらの訳はあてはまらない気がします。
そのように理解してもヘルプが読めない(意味が通じない)からです。
正直「イベント」は、僕にとっては口で説明するのが難しいです。
一応、ヘルプによりますと、以下のような説明がされています。
「マウスのクリックや、キーを押すなど、オブジェクトで認識され
る動作をイベントと呼びます。これらのイベントに対し、どのよ
うな処理を実行するかをコードで記述できます。ユーザーの操作
やプログラム コードの結果に対してイベントを発生させたり、
システムでイベントを発生させることもできます。」
これだけです。ここでは「オブジェクトで認識される動作のこと」だと書いてありますが、僕なんか未だに意味がよくわかりません。
ですので、僕はイベントに関してはこう勝手に解釈しています。
イベントとは…
・「何らかのプログラムが実行可能だよ!」という「合図(=信号)」
・「プログラムを実行可能な瞬間」
・「プログラムを実行可能なポイント」
・「プログラムを実行可能なスペース」
という感じでしょうか?
本当はヘルプの解説が一番正しいということなのでしょうが、実際にプログラムを書いているとこんな感じです。
例えばTimerイベントのヘルプには次のように解説されています。
「Timer イベント…フォームの "TimerInterval/タイマ間隔"
プロパティの設定値に基づいて、一定の時間間隔で発生します。」
このように…、
イベントはヘルプではとにかく「~イベントは~の時に発生します」という書かれ方をしています。つまりイベントとはなにはともあれ(?)「発生するもの」なのです。
で、いったい「何が発生するのか?」ということなんですが、そのときに「オブジェクトで認識される動作が発生する」と理解するよりは、「”何らかのプログラムが実行可能だよ!”という”合図・信号”が発生する」と理解した方がなんかわかりやすいです。
以上にもとづいて先ほどのTimerイベントのヘルプを意訳すれば、
「Timer イベントは、フォームの "TimerInterval/タイマ間隔"
プロパティの設定値に基づいて、一定の時間間隔で発生する、
”何らかのプログラムが実行可能だよ!”という信号(合図)
のことです。」
となります。
つまり、フォームのプロパティに設定した値に基づき、何秒かに一回発生する、「”プログラムを1つ実行可能だよ!”という合図」が「Timerイベントだ」というわけです。
(ややこしい?)
このように、「イベント」については、
「”何らかのプログラムが実行可能だよ!”という”合図(=信号)”」
と理解するとヘルプが読みやすくなるので、僕はそう理解しています。
もっと簡単に「プログラムが実行可能な合図」、または単に「合図」、
「信号」という感じで理解してます…。
なお、イベント(合図)にはユーザーが画面をクリックしたことなどから直接発生するものや、それらをきっかけとして、システムが新たに次々に発生させるイベント、そのほか、ある設定にもとづいて、システムが自動的に発生させるイベントなどがあります。
(それ以外にもいろいろとあるかも…です。)
なので、イベントは・・・、我々ユーザーがマウスのクリックやキーボードを押したなどの何らかの操作をした時はもちろん、それ以外にも、我々ユーザーの知らないところで、打ち上げ花火のようにバカバカ発生しまくっている…というイメージです。
(実際の厳密な動作はそうじゃないのかもしれませんが…。 でもまあ、とにかくそんなイメージです。)
●初心者の方へ ~ ヘルプを少しでも理解できるようになるために
前にも書きましたが、何度でも書きます。
ごめんなさい(笑)。
いきなり「VBAについてバクっと」説明してしまい、戸惑わせてしまったかもしれませんね。実際、本号のタイミングで説明することではなかったかもしれませんが、とりあえず、前回にVBAコードの説明をしましたので、関連事項として説明しました。
また、そのほかにも今回このようにご説明しました理由は、「ヘルプを多少でも読めるようにするため」ということもあります。
Accessのヘルプには市販の教則本には書いてない有益な情報が多いのですが、いかんせん、訳が変なのか?もとの作者がヘンなのか?、誰が読んでも「わかりにくい」解説が多いです。
僕も今でも読みこなせてません。
しかし、そんなヘルプでも、「オブジェクト」「プロパティ」「メソッド」「関数」「イベント」について、それぞれの関係がどうなっているかがわかると「なんとなく」「読めてくる」「意味がわかりかけてくる」のです。
もちろん、それは実際にプログラムを書いて、パソコンを動かしながら読まないとダメですが…。
そういうこともあって、今回(も?笑)、こじつけの多い説明でしたが、オブジェクトやプロパティなどについてある程度関連付けて説明させていただきました。
その方がイメージしやすいと思ったからです。
逆に(乱暴な手法ですが)こじ付けでもいいからある程度関連付けて覚えないと、いつまでたってもヘルプが読みこなせません。
ヘルプが読めないということは、自力のトラブル処理や自力のシステム変更ができないということに直結しますので、何でもいいから読める努力をしないといけません。
なお、本当の初心者の方は今回の説明でもわかりにくいと感じられたと思いますが、実際にプログラムを書いているときやヘルプを読むときに再度、本号を読み返してみてください。
そうすると少しずつわかりかけてくると思います。
また、今後もこちらから詳しい説明を重ねていきます。
なお、Accessのヘルプをある程度読みこなせるようになるためには、最低限、以下のことをしなければなりません。
・Accessの基本操作をある程度理解する。もちらん基本用語も覚える。
・簡易的なものでいいので、「データベース理論についての書籍」を読み大体でいいので把握する。用語も覚える
・SQLについても同上。
・VBAプログラミングを実際に行なってみる。
「えらい難儀だな。こりゃ。」という感じですが、もちろん僕も未だに全てできませんからご安心ください。(笑)
これらのことを意識して、データベースを勉強していけば、必ず少しずつヘルプが読めるようになってきます。
そして、何か困ったことが生じたときに、どんな市販解説書よりも「ヘルプ」が強い味方になってくれることと思います。
(訳が間違ってることもあるという噂も聞きますが…
そのへんは我々ではどうしようもないですね。
潔くあきらめましょう(笑)。)
ちなみにヘルプを完全に読みこなすには、最低限…
・JETエンジンの構造
・ADO、DAOの構造
・ODBCドライバの構造
・上記3者の関連
を勉強しなければおそらく読みこなせないと思います。
でも、はっきりいいまして、このような情報の詳細はインターネット上でも書籍でもありませんので、独学者にとっては完全にヘルプを読みこなすのはほとんど不可能です。
誰かプロのシステムエンジニアに弟子入りするしかありません。
でも2、3割読みこなせれば、AccessVBAでのトラブル処理等にはある程度対応できます。
○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●
※重要・関連記事
Access2000VBA・Excel2000VBA独学~VBAプログラミングとはどんなプログラミング方式なのか?(簡易版)
=====================
Access2000・mdbファイルが壊れる場面と回避方法・解決方法
Access2000・mdbの動作速度をネットワーク越し利用でも速くする方法~結構重要~:★ ダミーテーブルの連結フォームを非表示で常時開いておく
Access2000 100MbpsLAN Pentium3 の「ネットワーク越しのリンクテーブル」の開く速度が遅いときの対処法(Access2000のときからあった既知の問題)
>Access2000・100MbpsLAN Pentium3 でクエリが遅い場合の対処方法(データベース自体が遅い場合にもチェックしてみます。)
Excelが遅くなる場合の対処法~Accessや他のソフトからデータを貼付けした時
Access2000VBA・Excel2000VBA独学~VBAプログラミングとはどんなプログラミング方式なのか?(簡易版)
Access2000VBA・Excel2000VBA独学~用語:VBAプログラミングでの「オブジェクト」 について
ExcelでもAccessでも、顧客台帳(顧客マスタ)を作るときのヒント(できるだけ細かくしてしまう)
- 投稿タグ
- AccessVBA, Accessの独学, Accesの独学, ExcelVBA, Excelの独学, Excel連携VBA, クエリVBA, テーブルVBA, パソコンでの自動化, ピボットテーブル関連, フォームVBA, モジュールVBA, モジュールVBEditor, レポートVBA, 独学