ついて情報発信しています。VBAプログラムは本当の初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。メールを作成するのに必要な機能を備えたクラスを作るVBAの勉強このブログの記事一覧にもどるTweet前回まででクラスモジュールの意義、目的、クラスとは何か、オブジェクトとは何かが分かりました。サンプルコードがシンプルすぎて実用的では無かったので、今回はメールの配信先を取得するという実用的なクラスを作っていきます。実際に使えるクラスを作ってみることで、クラスの概念がはっきりと分かってきます。この記事のサンプルコードはコピペ禁止です(笑)自分の手で打ち込んでいきましょう。(写経と言います)この記事は初段です。初心者~三段をご参照ください。注意:この記事はオブジェクト指向をより良く理解することを目的にしています。そのためにメールを題材にしています。よって、この記事はメールの作成方法を解説していません。APIを使ってメールを配信するをご覧下さい。今回やりたいことはOutlookのメールの作成に必要な情報を用意する事です。メール作成を行うためには宛先の所にメールアドレスを入れたり、件名を入力したり、本文を入力したり、添付ファイルをつけたり、いろいろと作業が必要です。やりたいことは大体毎回同じ。そこで、メール作成に必要な様々な情報を取得する機能(=プロシジャ)を持ったクラスを生成します。方針としては、Functionプロシジャの復習も兼ねて、ある程度まとまったコードである宛先の作成を、まず普通のFunctionプロシジャとして作成します。その後、は楽勝で作れる件名と本文の作成、添付ファイルをつける部分はいきなりクラスに作っていきます。名簿からメールの配信先を作成するシートに一覧表を作っておく先日、VBAを教えている人のコードを見てびっくりしました。関連部門にデータを一斉配信するVBAのプログラムなのですが、なんと、宛先が標準モジュールのSubプロシジャの中にベタ打ち!どこからのブログからコピペして、宛先などの所を修正して作ったそうです。このようなことにならないよう、宛先は一覧表を作っておきましょう。メールの配信先を一覧表にしておくこの一覧表の3列目に「to」または「cc」が入力されています。これは、toの行の人はメールのAttentionにccの行の人はCCの宛先に入れることを意味しています。」(セミコロンと半角スペース)で区切ってつないだ文字列を作ると言うことです。この記事は初段レベルなので、Functionプロシジャの解説は省いていきなりサンプルコードを示します。FunctionFunctionプロシジャの戻り値をVariantで宣言して、配列を代入することで、Attention、CC、BCCに入れる3つのメールアドレスの文字列を一度に返しています。クラスモジュールを作るクラスモジュールを作ります。分かりやすいクラス名をつけます。今回はクラス名を「メールに必要な情報作りクラス」にします。わかりやすっ!このクラス名が、標準モジュールで生成するインスタンスの型になるんでしたね。それではクラスを作ります。クラスモジュールを作成。クラス名はオブジェクトの型になるので超分かりやすくつけるさっき作った宛先を作るFunctionプロシジャをクラスのメソッドにするオブジェクトは「データ」と「機能」を持ったモノ。そのオブジェクトを設計するのがクラスモジュールでしたね。どんなデータを持っているのか、どんな機能を持っているのか。今回は予め持っているデータは無くて、データはシートにある宛先一覧です。それでは機能を作成していきます。宛先を生成するメソッドを作るメソッドは機能です。クラスモジュールの中ではSubプロシジャやFunctionプロシジャで書くんでしたよね。さっき、とりあえず標準モジュール内で作ったFunctionプロシジャを切り取って(Ctrlとx同時押し)クラスモジュールに貼り付けます(Ctrlとv同時押し)。いま、クラスモジュールにFunctionプロシジャが書かれた状態になっています。Propertyプロシジャを作るで解説したように、実際に使う時はプロパティの値として取り扱います。3を思い出しましょう。3に当たる部分が、今回のメールアドレスの宛先の部分です。メールアドレスの宛先の部分を求める為のFunctionプロシジャをまず作りました。3の例で言えば3を求める作業。Letで取り扱うんでしたよね。Getで標準モジュールから見て取得します。Propertyここまでくれば、あとは標準モジュールでRange("A1").Interior.ColorIndex=3と同じ感覚で使えます。ここら辺でテストしておきます。標準モジュールでインスタンスの生成と表示をすればいいんですよね。初段向けの記事なので、MsgBoxではなくDebug.Printで行きます。このままメールの宛先に代入できる形になりました。試しに実行してみた結果。難しい宛先の取得を題材にしました。Getの使い方のイメージが掴めてきたと思います。件名とか本文は定型文ベタ打ちですよね。Getプロシジャの中で固定分を打ち込んでしまいましょう。何なら、標準モジュールでグローバル変数を宣言してそこに代入してもOKです。代入する場所はもちろん標準プロシジャですよ!クラス内で定義してもできますが、それだと、何のためのクラスなんだ。3を求める為のオブジェクトを作った(⇒コピペじゃ無くて写経した人のみ)ここまでを自由自在にできれば、VBAのオブジェクト指向はほぼマスターできたと言えます。新しい言葉を伝授します。隠蔽化(カプセル化とも言います)です。機能をひとまとめにしたクラスは標準モジュールからみても分からないですよね。隠蔽化して標準モジュールだけでは何をやっているか分からなくなっているのに、メンテナンス性はあがっている。A1セルの値をメッセ...VBAによるプログラミングにオブジェクト指向を取り入れます。週間)1985年生まれの会社員。業務改善部隊に異動で芽を出し、現在に至る。本業での知識と経験を元に、ブログとTwitterで1生産性向上2業務改善3自動化について情報発信しています。アーカイブはてなブログをはじめよう!mutable_yunさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。