★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol.0002:(04)「変数(生データ)」を操作する道具たち(=道具=命令・機能)
バックナンバー目次ページは→こちらです。
まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
Vol.0002
タイトル:(04)「変数(生データ)」を操作する道具たち(=道具=命令・機能)
===============================
★ (04)「変数(生データ)」を操作する道具たち(=道具=命令・機能)
※参考の表
https://euc-access-excel-db.com/00000WPPDF/tool_for_hennsuu01.html
↑変数を動かす道具たち(=各種命令)をタイプ別に一覧表にしてみました。
とても大きな表なので見にくいかもしれませんが、ご参考にしてみてください。
いちおう、このhtmlを作った、元のxlsxファイル、「変数を動かす道具たちとその役目.xlsx」もダウンロードできるようにしておきました。
↓
https://euc-access-excel-db.com/00000WPZIP/tool_for_hennsuu01.zip
ご自分用のメモとして、書き換え、書き加え、などしてお使い下さい。
では、以下、本文です。
=======
『 「変数(生データ)」を操作する道具=命令たち』とは、
料理で言うと、包丁、まな板、ナベ、菜ばし、おたま、フライパン、電子レンジ、オーブン、のようなモノです。
つまり、文字通り、「道具」です。
VBAの世界では、
「ステートメント、各種関数、演算子、プロパティ、メソッド、列挙、組込定数、」といったものたちが、その「道具」に相当します。
で、ここでも「乱暴」ですみませんが、
VBAの全体像が理解できるまでは、
少なくとも「オブジェクトブラウザ」が読めて、便利さが実感できるようになるまでは、
その「ステートメント、各種関数、演算子、プロパティ、メソッド、列挙、組込定数、」などなど・・・、
それらは全部、「命令」と、あえて、とらえてしまいます。
つまり、「生データと変数以外は」、「ぜぇ~んぶ!」、「命令だ!!」、ととらえてしまう・・・ということです。
「ぜぇ~んぶ!」、「変数」を、「料理」するための、「調理器具・道具だ!!」と、ととらえてしまう・・・ということです。
(正直、「列挙、組込定数」はビミョ~なんですけれども、でもそれでも最初は詳しく説明しすぎると混乱してしまうので、そう覚えちゃってください。)
習い始めの最初のうちは、そのほうが面倒が少ないので、あえて、そうします。
より理解できるようになったら、それぞれを詳しく理解しなおせばOKだと思います。
(必ず、「詳しく」「理解しなおして」ください。でなければ、それも「挫折の一因」となってしまいます。「変数」をはじめ、「基礎」をチャランポランに終わらすと結局挫折が待っているだけですので・・・))
で、その「命令たち」も大別すると、「2つだけ」「ふたくくりだけ」になります。
そしてここでも、一般変数とオブジェクト変数に、呼応します。
「一般変数を動かす"命令たち"」、
と、
「オブジェクト変数を動かす"命令たち"」、
の、
「2くくり」
です。
具体的には、以下の(a)、(b)、のようになります。
(a)一般データ・一般変数を動かす道具たち。(=命令たち)
「一般変数(一般データ)」は、主に(絶対、ではない)ですが、
「ステートメント」「VBA関数」、「演算子」、「ワークシート関数(WorksheetFunctonプロパティを使っての)」、といった道具たち(=命令たち)を使って、
変数を、その「外側から」動かします。
(・・・・というイメージです。)
逆に言うと、「生の一般データ・一般変数」を動かすときは、「ステートメント」「VBA関数」、「演算子」、「ワークシート関数(WorksheetFunctonプロパティを使っての)」、を使うことが多い、です。
現実、「演算子」ではオブジェクトは「直接は」動かせません
=オブジェクトの「直接的な操作」はできません。
(比較条件に使うことはありますし、僕が知らないだけで多少の例外はあるかもしれませんが)。
また、「VBA関数(WorksheetFunctionプロパティで使えるものも含む)」の場合は、
少しだけオブジェクトを動かせるものがありますが、
でも、そのうちで良く使うのは「CreateObject関数やGetObject関数」などの数個で、
数百以上もある両関数たちの中で10個も使わないと思います。
特にビジネスパーソンがプログラムを作る場合はそうなります。
なお、「ステートメント」だけは、オブジェクトがらみの場合もよく使います。兼用です。
(b)オブジェクト式・オブジェクト変数を動かす道具たち。(=命令たち)
「オブジェクト変数(オブジェクト式)」は、主に(こちらも「絶対」ではない)ですが、
オブジェクトの内側から「プロパティ」「メソッド」「イベント」といった命令・機能たちを引き出しつつ、
で、外側からは「ステートメント」、「列挙(Enum)」、「組込定数」といった道具たち(=命令たち)を使って、動かします。
(・・・・と、これも、そういうイメージです。)
※「プロパティ」「メソッド」「イベント」は、あらかじめ決められたオブジェクトの「内部・内側」に、更にあらかじめ、セット・内包されている「機能=命令」です。
なのでそ3つだけは、他の命令たちと違って『「オブジェクトの」「メンバー(一員?)」』とも呼ばれます。
オブジェクトブラウザを読むときは、このイメージが非常に重要です。
逆に言うと、「生のオブジェクト=オブジェクト式・オブジェクト変数」を動かすときは、
「ステートメント」「プロパティ」「メソッド」「イベント」、「列挙(Enum)」「組込定数」を使うことが多い、です。
現実、「プロパティ」「メソッド」「イベント」「列挙(Enum)」「組込定数」では、「文字ベース」の「生の一般データ・一般変数」は直接は動かせません。
(VBA関数たちのように、文字系データの、直接の、置換、結合、分解、計算、その他、といった操作は、基本・やりません。例外はあるかもしれませんが。)
特にビジネスパーソンがプログラムを作る場合はそうなります。
なお、「演算子」は「比較条件」等々にて少しだけ使います。
ところで・・・
基本的に、多くのプロシージャで、(a)と(b)は混在します。
(※プロシージャ=VBAにおけるプログラムの最小単位のことです。VBAにおける最小粒度?のプログラムのこと。です。Sub~End Subまで、とか、Function ~ End Functionまで、・・・など。)
1つのプロシージャの中で
(a)の道具たちばっかりのブロック、(b)の道具たちばっかりのブロック、という風に「カタマリ」で分かれて混在することもあれば、
1つの命令文の中、あるいは、1つの命令ブロック(1つのIF文やループ文の中、など)、
の中でも混在します。
もちろん、まるっきり (a)だけで構成されるプロシージャもそこそこはありますが、混在するケースよりはあきらかに少ないです。
ちなみに、(b)だけで構成されるプロシージャは「マクロの記録」で記録されたものが主に該当します。
が、でも、大抵はそれに(a)をプラスしたり、書き換えたりして、汎用化することが多いです。
たとえば、(a)の道具たちの場合は、一般変数と共に、例えば以降のような事に使います。
(※ この事例たちを「イ」とします。)
VBAの場合は、料理で言うと、「下ごしらえ」的なことをする場合が多いです。
(「絶対」、ではないですが。)
・各種オブジェクトのプロパティの値の加工
・VBA関数やメソッド、プロパティに渡す「文字ベースの引数」の値の加工
・単純に計算(四則演算等々)
・開始日付と終了日付による期間日数の割り出し
・日付データからの生年月日や締め日、年度末、月度、年度、などの算出
・置換(ある文字列内の、特定の短い文字列や単語などの。)
・検索(ある文字列内の、特定の短い文字列や単語などの。)
・テキストファイルやCSVファイル処理の操作(読み書きその他。)
・フォルダ内の全てのサブフォルダのファイルのフルパスの取得
・フルパスからのファイル名のみやパスのみの切り出し
・文字列の結合、分離、切り出し、など。
・「グラフやシートなどの各種オブジェクト」やその他のモノに対する各種設定値の作成
・True/Falseの判断
・フラグ処理
・文字コード処理
・16進数、2進数変換。その他の各種変換。
・配列操作
・API利用
などなど
(※ ↑繰り返しますが、この事例たちを「イ」とします。)
そして、(b)の道具たちの場合は、オブジェクト変数と共に、例えば以降のような事に使います。
(※ この事例たちを「ロ」とします。)
VBAの場合は、料理で言うと、「メイン調理」?「仕上げ?」「盛り付け?」的なことをする場合が多いです。
こちらは「下ごしらえしたもの」・・・つまり上記の(イ)の事例の処理をしたものを使って、そのうえで、以下のように動かすケースが多いです。
(もちろん こちらも、「絶対」、ではないですが。)
・単一ブックの単一操作や複数ブックの同時操作
・単一シートクの単一操作や複数シートの同時操作
・『 「オブジェクトそのもの」を「引数」として使用する関数、プロパティ、メソッドなど 』の、その「引数」として。
・ウィンドウの操作
・Excelファイル以外のファイルの操作(テキストファイル、画像ファイル、Wordファイル、PwPointファイルなど)
・フォルダ内の全てのサブフォルダの各種ファイルの一括操作
・単一セルの操作、セル範囲の操作
・グラフの操作
・ピボットテーブルの操作やそのサブ機能の操作
・名前定義機能の操作
・フィルタ機能の操作
・並べ替え機能の操作
・Microsoft Queryの操作
・QueryTableの操作
・ListObject(2007以降の「テーブル機能」)の操作
・数式の操作
・色や罫線、各種書式設定の操作
・オートシェイプ(図形)、画像(図、写真等々)の操作
・印刷レイアウトの操作
・印刷設定の操作や印刷実行や連続印刷
・テキストファイルやCSVファイル処理の操作(読み書きその他。)
・Webブラウザ操作
・Word操作、Accesss操作、PwPoint操作、Outlook操作、など。
・VBAコード・VBE画面」などの操作
・クリップボードの操作
・API利用
・ADO、DAO、などの「ミドルウェア」の操作
・COMオートメーションに対応したソフトの連携操作(IE、Chrome、ファイルメーカなど)
などなど
(※ ↑繰り返しますが、この事例たちを「ロ」とします。)
繰り返しますが、基本的に、多くのプロシージャで、(a)と(b)、つまり、(イ)の事例たちと(ロ)の事例たちは混在します。
「イ」が「下ごしらえ」的なイメージで、
「ロ」が「メイン調理」的なイメージのため、です。
逆に言うと、1つのプロシージャ(=VBAの最小単位のプログラム1個分)の中で、
前述項目の「イ」の事例に書いたような数々の処理をしたいなら・・・
「一般変数と (a)の道具たち」を使います。
同じく前述項目の「ロ」の事例に書いたような数々の処理をしたいなら・・・
「オブジェクト変数と (b)の道具たち」を使う・・・、
ということになります。
で、繰り返しますが、
1つのプロシージャの中には、
(a)と(b)・・・、
(a)の道具たちと(b)の道具たち・・・、
つまり、「イ」の処理と「ロ」の処理、
それぞれが「混在する」・・・、
ということになります。
( しつこくてすみませんが、「イ」が下ごしらえ的なイメージで、「ロ」がメイン調理的なイメージのため、です。そして、細かい粒度で混在し合います。)
下ごしらえだけでも、メイン調理だけでも、お料理は成立しません。
(強いて言うと、下ごしらえだけでも成立はする場合も多少はあるのかもしれませんが・・・。)
VBAを習い始めのときは、
「今自分は、下ごしらえをしているのか?それとも、メイン調理をしているのか?」とか、
「今は下ごしらえをしているんだから、(a)の道具たちと、一般変数だな!?」などと
意識することも大切だと思います。
そういう状況判断、「意識分け」、が、積み重なって、「変数のデータ型の間違いのないリレー」、ひいては「エラー削減」「自力でのエラー解決」「コスパアップ」等々に繋がっていきます。
以下、参考や注意事項です。
※「ステートメント」は、「一般変数にもオブジェクト変数にも」、両方ともに対して使う共通の命令です。
変数宣言(Dim××××) や代入(LetやSet)、条件分岐処理(If××××)、繰り返し処理(ループ)等々の構文に使う命令語句?や文?です。
https://www.vba-ie.net/statement/index2.php
料理で言うと、「調理道具」的なモノのひとつです。
※「演算子」→「記号めいた」「命令」・・・、というイメージです。
単語のようなものもありますが、実際に使うのは記号めいたもののほうが多いとは思います。
「=」「*(×)」「/(÷)」「+」「-」「Mod」「>」「<」「<=」「=>」「<>」「Like」「And」「Or」「Is」などです。
https://www.vba-ie.net/programing/operator.php
「演算子」の「超」重要なところは、
『 「記号めいた短い文字のくせに(中には1文字しかない短い命令のくせに)」、
「高度にも」、「自作関数、プロパティ、VBA関数、ワークシート関数」などと同じように、
「計算結果やTure/False」といった「値(=生の一般データ)」を返す・・・・、
あるいは、TrueやFalseを返すこととなじみがある・・・・』、
ということです。
(Trueは「ビンゴ!あたり!、真」という意味で、Falseは「ブブー!ハズレ!、偽」という意味です。)
つまり(そのたった1文字の)「演算子」も、たった1文字のくせに、「自作関数、プロパティ、VBA関数、ワークシート関数」などと同じ、「命令の一種なんだ」「命令のようなものなんだ」と理解してしまうほうがよい・・・・ということです。
それを理解することです。
例えば「+」という演算子なら、「ある数を足せ」という命令と捉えることができます。
これは超意訳すると、『「ある数を足す」という動作をする「メソッドのようなもの」・・・』、とも取れます。
そして、ある数、というものは、「引数のようなものだ」、ともとれます。
結果、そういう意味にとることで、VBAの7~8割の命令は、『「返す」「戻す」という動きをするんだ!』、ということもイメージしやすいのではないか?と思います。
逆にいうと、「返す」「戻す」という動き・感覚を理解できれば、VBAの7~8割の命令を理解する「素地ができる」、とも、イメージできると思います。
『7~8割の命令は、「返す」「戻す」という動きをする!』ということがわかれば、
・そもそもこの命令は値やオブジェクトを返すのか返さないのか?をまず調べ、
・次に、もし「返す」のなら、どんな型の値を返すのか?戻すのか?を調べ、
・値やオブジェクトを返すついでに、プラスで、何らかの動きをするのかしないのか?
を調べれば、多くの命令のことはなんとなく(おおまかにでも)つかめる・つかみやすくなる・・・し、それに、型と型のリレーもしやすくなり、エラーが減る・・・、ということにもなります。
このとき、調べることに使うものは、ヘルプとオブジェクトブラウザです。
Webで調べるよりも確実です。(2013以降はヘルプもWebになってしまいましたが・・・。正直使いにくいです。2010や2003のヘルプのほうが断然使いやすいです。オブジェクトブラウザとの連携もいいですし。特に2003以前のヘルプは階層構造も親オブジェクトも分かるし。逆に2007以降のヘルプは2003ヘルプの反省からか、検索語句のヒット率が良いです。なのでExcelVBAの学習は2010や2003などのほうが向いているかもしれません。)
(※まだ各種「関数」や「自作関数」の学習をしてない方には申し訳ありません!でもそれらの関数の学習をしたときに、このことを是非、思い出してください!)
演算子も、料理で言うと、「調理道具」的なモノのひとつです。
※「列挙(Enum)」→よく「ダイアログボックスで出てくる」、各種の設定項目等々。
(ダイアログの中で、線で上下に分かれてたり、四角い線で囲まれていたり、ドロップダウンやリストになっていたり、のカタマリです。)
料理で言うと、「スパイス、調味料」的なモノ??かもです。
参考:
列挙と定数のうち”目に見える”もの、「メソッド・プロパティ・列挙(=Enum)・定数(=Const)」と右クリックメニューの画面の関係について~
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/menu_n_method-prop-enum-const01
※「組込定数」→その1つの「列挙」の中の、実際の細かい設定。
(丸ポチつけたりするヤツ、とか、ドロップダウンやリストの中の実際の内容、など。
=定数。列挙(Enum)の中に含まれていて、「列挙」の「選択肢」としてあらかじめ設定されている値のこと。)
こちらも料理で言うと、「スパイス、調味料」的なモノ??かもです。
参考:
列挙と定数のうち”目に見える”もの、「メソッド・プロパティ・列挙(=Enum)・定数(=Const)」と右クリックメニューの画面の関係について~
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/menu_n_method-prop-enum-const01
※繰り返しになりますが、
「VBA関数」、「演算子」、「ワークシート関数(WorksheetFunctonプロパティを使っての)」、といった「一般データを動かす道具=命令たち」
と、
「列挙(Enum)」、「組込定数」といった、「オブジェクトを動かすための道具たち」のうちの一部、
また、
「ステートメント」という両者共通の道具、は
「オブジェクトの外側」に位置しているイメージです。
そして、さらに繰り返しになりますが、「プロパティ」「メソッド」「イベント」は、あらかじめ決められたオブジェクトの「内部・内側」にセット・内包されている「機能=命令」です。
なのでそ3つだけは、他の命令たちと違って『「オブジェクトの」「メンバー(一員?)」』とも呼ばれます。
オブジェクトブラウザを読むときは、このイメージが非常に重要です。
そのほか、オブジェクトブラウザに書かれているもの「以外のモノ」も「命令なんだ」「そして、たくさんの命令があるんだ」と理解することも重要です。
「列挙(Enum)」「組込定数」は「微妙」で、VBAコードを書いていると、オブジェクトの中に内包されているような気になってきますが、どうやら異なるっぽいです。
(※本メルマガでは、あえて・ムリヤリ・「命令みたいなもんだ」としてしまっていますが、前述もしましたが、正直、言い過ぎかもしれません。その意味でも「ビミョー」であります。)
例えば「列挙(Enum)」は、オブジェクトブラウザで見ると「クラス」のペインの中に、に、オブジェクトたちの「下」に、つまり、オブジェクトと同列に、オブジェクトと同じ位置に、でん、と居座っているからです。画面左側の「クラス」のペインで、下のほーーーうにスクロールすると、黄色い絵のアイコンで出てきます。
それをクリックした時、説明ペインを見たときに「Enum ×××」と表示されているヤツら」です。
そいつらが、「列挙(Enum)」たちです。
(オブジェクトブラウザは、VBEの画面を開いて、それをアクティブにした状態でF2キーを押すと出てきます。下図参照。)
もし、列挙がオブジェクトに「含まれる」命令?なら、クラスのペインの右側の「メンバー」のペインの中に入っていなければなりません。
プロパティやメソッド、イベントたちと同列な扱いで。
でも「そうなっていない」「オブジェクトと同列のペインに居る」、ということは、やはり、「列挙(Enum)」は「オブジェクトには含まれておらず、オブジェクトの外側に居る」というイメージなんだと思います。
(ハズレてたらごめんなさい。)
よって「オブジェクト操作」とは、
オブジェクトの中にあらかじめ備わっている「プロパティ」「メソッド」「イベント」といった命令(=機能)たちを、内側から引き出して使いつつ、
外側から、「ステートメント」「列挙(Enum)」「組込定数」で動かす・・・、
そういう操作のこと・・・・、と言えると思います。
==============================
今回は以上です。
==========================================================================
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
----------------------------------------------------------------------
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
発行システム:『まぐまぐ!』 http://www.mag2.com/
配信中止はこちら https://www.mag2.com/m/0001691660.html
----------------------------------------------------------------------