VBAにもっと詳しくなろう♪ 「パーフェクトExcel VBA」
VBAをパーフェクトにマスターするシリーズ♪ 2章「式と値」「パーフェクトExcel VBA」
VBAをパーフェクトにマスターするシリーズ♪ 3章「ステートメント」「パーフェクトExcel VBA」
VBAをパーフェクトにマスターするシリーズ♪ 4章「フロー制御ステートメント」「パーフェクトExcel VBA」
VBAをパーフェクトにマスターするシリーズ♪ 5章「プロシージャ」「パーフェクトExcel VBA」
VBAをパーフェクトにマスターするシリーズ♪ 6章-1「モジュール」「パーフェクトExcel VBA」
続きを書きました。
VBAをパーフェクトにマスターするシリーズ♪
今回は「6章-2,3,4,5,6」で新しく知ったことと、思ったことを簡単にまとめました。
6章は分厚いので少しずつ進めていきたいと思います。。。
※これは学習記録です。
書籍の内容はあえて多くは載せていません。
大事なことも省いていますので、詳細につきましては書籍をご覧ください。
標準モジュールとオブジェクトモジュールの違いは・・・
標準モジュール以外が、オブジェクトモジュールのようです(シートモジュール、ブックモジュール、フォームモジュール、クラスモジュール)。
それぞれできることとできないことがあります。
6-2-1 Meキーワード
オブジェクトモジュールでは、Meキーワードが使えます。そしてこのMeは省略できます。
一方で、標準モジュールについてのオブジェクトの省略は複雑です。省略されたとみなされるプロパティがどのプロパティなのか、またActiveSheetプロパティやActiveWorkbookプロパティが、どのオブジェクトを指すのか、これらについてはコードの文脈や実行時の状態によって異なるからです。
都合により、オブジェクトが固定されるシートモジュール、ブックモジュールはなるべく使いたくないのですが、クラスモジュールに辿り着くためにも、順番に学び進めていきたいと思います。
6-2-2 宣言できるメンバー
オブジェクトモジュールでは定数(とユーザー定義型)は宣言できません。
パブリックレベルの定数、ユーザー定義型及び列挙型は、常に標準モジュールに記述するという方針でよいでしょう。
(ユーザー定義型と列挙型はそもそも使っていないというか使えていないです、、、)
6-2-3 イベントとイベントプロシージャ
Excel VBA では、Workbook、Worksheet、UserFormなどのオブジェクトに対して、ユーザーがすぐに利用できるように、たくさんのイベントがあらかじめ定義されています。
あらかじめ用意されているイベントを使用するだけでなく、独自のイベントを定義することができます。
これらイベントについての発展的な活用については6-8で解説します。
6-2-4 オブジェクトモジュールの役割
シートやブックに関連したコードはシートモジュールやブックモジュールを使うとして、それ以外のコードはオブジェクトに関連しませんから、結果的にほとんどのコードを標準モジュールに記述することになってしまわないでしょうか?
いえ、オブジェクトがないなら作ってしまえばよいのです。それを実現するのがクラスモジュールです。続く節では、オブジェクトモジュールに具体的にメンバーを追加する方法、すなわちプロパティ、メソッド、イベントの定義の方法について解説を進めていきます。
6-3-1 オブジェクトのプロパティとメソッド
オブジェクトのプロパティとは、オブジェクトへのデータの設定、オブジェクトからのデータの取得のいずれかの機能、または両方の機能のことをいいます。
プロパティを作成する方法
・モジュールレベル変数
・Property Let/Setプロシージャ
・Property Getプロシージャ
オブジェクトに対して処理を実行するためのメンバーがメソッドです。
オブジェクトにメソッドを追加するには、以下のどちらかのプロシージャをオブジェクトモジュールに宣言します。
・Subプロシージャ
・Functionプロシージャ
6-3-2 パブリック変数によるプロパティ
6-3-3 プライベート変数によるプロパティ
プライベートプロパティは他のモジュールからアクセスできないので、
以降のプロシージャを使用して読み書きします。
6-3-4 Property Let/Setプロシージャによるプロパティの設定
書き込み用。
6-3-5 Property Getプロシージャによるプロパティの取得
読み込み用。
設定または取得のいずれかに制限をかけたいときや、なんらかの処理を伴わせたいときは、こちらの手法を選択することになります。
この辺は使えるようになると便利かなと思います。
VBAでこのようなプロシージャが使えるということを、この本を読むまで知りませんでした。
6-3-6 Subプロシージャによるメソッドの定義
6-3-7 Functionプロシージャによるメソッドの定義
6-3-8 プロパティとメソッドを追加する方法の指針
Functionで戻り値を取得できるのに、なぜProperty Getもあるの?
→方針を決めておいて(できるだけ)使い分けるようにしましょう。
6-4-2 シートのオブジェクト名とシート名
シートには、Excelのタブに表示されている「シート名」とは別に、「オブジェクト名」があります。シート名は誰でも変更することができるので、プログラムを書くときには「オブジェクト名」を使った方が良いでしょう。
書籍では「シートモジュールでできることはシートモジュールに書いて、標準モジュールをコンパクトに保ちましょう。」というのが方針のようです。
標準モジュールは影響(させることのできる)範囲が広いので、そのシートでしか操作しないこと、またそのシートでのイベント処理は、シートモジュールに書きましょう、というのが基本のスタンスです。
(余談ですが、私の今関わっている仕事では、ある目的があって、これの逆をしようとしています。いつでも使えるたった一つの正解はないので、状況によってその都度、最適解を探すのがよいかと思います。)
6-5-3 ブックモジュールの使用
ブックモジュールのイベント処理については、11章で紹介されます。
**6-6-6 タブオーダー*
ユーザーフォームを右クリックして、「タブオーダー」を選ぶと、まとめて順番を変更することができます。
し・り・ま・せ・ん・でした!!
今まで、プロパティウィンドウの「TabIndex」をちまちまと変えていました。
次はいよいよ待望のクラスモジュールです!
続く。
書籍「パーフェクトExcel VBA」発売についてのお知らせ
第4回 | VBAをパーフェクトにマスターするシリーズ♪ 4章「フロー制御ステートメント」「パーフェクトExcel VBA」 |
第5回 | VBAをパーフェクトにマスターするシリーズ♪ 5章「プロシージャ」「パーフェクトExcel VBA」 |
第6回 | VBAをパーフェクトにマスターするシリーズ♪ 6章-1「モジュール」「パーフェクトExcel VBA」 |
第7回 | VBAをパーフェクトにマスターするシリーズ♪ 6章-2,3,4,5,6「モジュール」「パーフェクトExcel VBA」 |
第8回 | VBAをパーフェクトにマスターするシリーズ♪ 6章-7,8「モジュール」「パーフェクトExcel VBA」 |
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント