ついて情報発信しています。VBAプログラムは本当初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。A1セルの値をメッセージボックスに表示させるだけのクラスをつくるVBAの勉強このブログの記事一覧にもどるTweetVBAによるプログラミングにオブジェクト指向を取り入れます。クラスモジュールは日本語での情報がネットでも本でも少なく、あっても超ムズかしかったので、誰でも分かる様に簡単に解説します。そもそもクラス名やメソッド名などがアルファベットなのでわかりにくいと思ったので、全部日本語にします。Start.この記事は初段です。初心者~三段をご参照ください。クラスを使うためのオブジェクトとメソッドの前提知識で詳しく解説しています。エクセルのオブジェクトを例に具体的な解説をしていますので、併せてご覧下さい。簡単に要約すると下記のようになります。エクセルでは例えば、Sheetsがオブジェクトです。Sheetsとはそこにあるシート(達)そのもののことで、それがオブジェクトです。Sheetsにはいろんな機能がありますよね。削除するとか、追加するとか。そのDeleteとかAddと言ったSheetsのようなオブジェクトが持つ「機能」が書かれたモジュールがクラスです。Sheetsオブジェクトの内容を説明するSheetsクラスにDeleteはどういった機能ですよ、Addはどういった機能ですよ、という説明が書かれています。Sheets.Addの例を見て分かる様にオブジェクトに「.メソッド名」でそのオブジェクトが持つ機能を使う事ができます。ある説明で「オブジェクトはモノと言う意味で、Sheets.Addはシートというモノに対してAddという操作をしている」という説明はウソです。Sheetsが持っている機能のAddを呼び出しています。命令している先はSheetsではなくパソコンです。別の見方をしてみます。自分だけの独自の関数をFunctionプロシジャで作る事ができます。これを使う事によって標準プロシジャの中に複雑な処理を書かずに済むようになる、非常に有用なプロシジャです。有用なのでたくさん使ってしまいます。するとFunctionプロシジャが増えていきます。後から見た時に、これってどこで使うんだっけ?ってなると困ります。そんな時、Aと言う処理に使っているFunctionプロシジャを一つにまとめて保存しておけたら便利だと思いませんか?ある処理をするのに使うプロシジャをまとめておくのがクラスである、と言う言い方もできます。「受注処理」と言う業務があって、その業務の中に「受注金額集計」という処理と「受注登録フォーマット作成」と言う作業があるとします。受注処理クラスに受注金額集計というFunctionプロシジャと受注登録フォーマット作成というSubプロシジャをまとめておく、と言うイメージです。受注処理.受注金額集計()みたいに使う。これがクラスの本質です。具体的な使い方は下記で説明していきます。クラスの使い方の手順それでは具体的な手順を見て行きましょう。クラスの使い方の手順は下記の通りです。クラスモジュールでクラスを作る標準モジュールでクラスを元にオブジェクトを作る作ったオブジェクトを標準モジュールで使うたったの3ステップです。順に解説していきます。クラスモジュールでクラスを作るクラスを作る目的は、Sheetsのようにある機能を持ったオブジェクトを作りたいからです。言うわけで、今回やりたいことを明確にします。今回やりたいのはA1セルに入っている「abc」をメッセージボックスに表示させることクラスモジュールを挿入するそれでは行きます。クラスモジュールを挿入します。挿入⇒クラスモジュールクラスモジュールを挿入クラス名をつける次に、表示⇒プロパティウィンドウでプロパティウィンドウを表示します。プロパティウィンドウを表示させるプロパティウィンドウを表示させる理由はクラス名を変えたいからです。表示されたローカルウィンドウ。オブジェクト名という項目にClass1と書いてあるオブジェクト名と書いてありますが、これはクラス名です。クラスを作っただけではオブジェクトは生成されません。これのオブジェクト名と書かれているのは「オブジェクトを生成するためのクラス名」の略だと思っておきましょう。デフォルトでClass1と記入されているので、分かりやすい名前にします。タイトルの約束通り、この記事では日本語で超分かりやすくクラス名を命名します。超分かりやすいクラス名をつけたクラスから生成したオブジェクトで何をやりたいのかをそのままクラス名にします。クラスはオブジェクトの仕様書ですから、やりたいことをクラス名にするのが理にかなっています。このクラス名はオブジェクトの型名になる予定です。これまでのVBAを思い出して下さい。オブジェクトを変数に入れるときに型を宣言していましたよね。理解がズレないように例を挙げておきますね。ActiveSheetAsの後のWorkbookとかWorksheetが変数の型の名前です。今回はクラスモジュールを作ってそのクラスモジュールの名前を変えました。これはオブジェクトを代入するための型名を自分で作ったと言う事です。WorkbookのWorkbookの部分を自分で作れたんです。「A列の値を操作するクラス」っていうちょっとマヌケな名前だけど。クラスの中身を作るクラス名(=将来作るオブジェクトの型名)が決まったら、その中身を作っていきましょう、自分で作った型ですよ!ワクワクしますね。これから作業するのは先ほど作った「A列の値を操作するクラス」と言う名前のクラスモジュールです。Functionとりあえず、Functionプロシジャを作りました。自分独自の関数を作るでFunctionプロシジャを勉強しましょう。念のため、ざっくりFunctionプロシジャを解説すると、関数を自分で作る、と言う事ですね。普通のエクセル関数のVLOOKUPでは最初に検索された同じ行の値を返しますが、最後に検索された値を返す関数を自分で作る、みたいな。値を返す手順を自分で作るのがFunctionプロシジャでした。この部分がメソッドとなります。これからこのメソッド(=オブジェクトの中に書かれた機能、Function=関数)の中身を作っていきます。中身を追記したのがこちら。3行追加しただけです。Function「文字列を受け取る変数str」はその名の通り、A1セルの値を一時的に代入するための変数です。今は変数介さずに直せずFunctionに返せばいいのですが、後々威力を発揮するので、いまのうちに変数を用意しておきます。これで、Classモジュールが完成しました。標準モジュールでクラスを元にオブジェクトを作る作ったオブジェクトを標準モジュールで使う標準プロシジャを用意する標準モジュールを挿入して、Subプロシジャを作って下さい。(さすがにココは省略でいいですよね)標準モジュールでクラスを元にオブジェクトを作るいよいよ、自分で作ったクラスからオブジェクトを作るときが来ました。クラスモジュールは、クラス、つまりオブジェクトが持つ機能(=今回の例ではA1のセルを取得するだけ)を設計するだけでした。実際に使えるようにオブジェクトを作ります!(プログラミングの世界では作成では無く生成と言う言葉を使う様なので、今後、生成すると言います。)以下は標準モジュールに書きます。SubただSubプロシジャを挿入しただけです。中身を書いていきましょう。自分で作った変数名を宣言する場所が来ました!しかも、その型の名前がさっき作ったクラスモジュール。(Class1とかMyClassみたいなクラス名だから解説ブログなのにわかりにくいんですよ)この一行が何を意味しているか分かりますか?ちょっと自分で考えてみて下さい。分からなければ例えば、どういうことと同じなのか考えてみましょう。・はい、そうですね、これと同じです。Workbook変数名が自分で決められるのは当たり前として、変数の型名を「A列の値を操作するクラス」と言う名前に自分で決めた事の実感が得られてきました!あとは使うだけです。Sheets.Addと同じですね。今はクラスという仕様書と変数を宣言したにすぎません。オブジェクトの実態を作りましょう!インスタンスを生成する先ほどから「オブジェクトを作る」といってきました。オブジェクトと言って何ら問題はありません。クラスから生成されたオブジェクトのことを特に「インスタンス」と呼ぶ風習があります。覚えておくと便利です。覚えていなくてもVBAでは問題ありません。(ちなみに、今回、生み出すオブジェクトはまさに自分で定義したクラスから生み出すオブジェクトなので、「インスタンス」と呼ぶにふさわしいモノ(=オブジェクト)です。Sheetsはオブジェクトですが、自分で生成していないので、インスタンスではありません)それではインスタンス(=自分で作るオブジェクト)の生成です。Subおめでとうございます。インスタンスの生成完了です!オブジェクトを変数に格納するので当然、”Set”がついています。注目すべきはNewです。VBAでは、クラス名の前にNewをつけてオブジェクト型の変数に代入することで新たなインスタンスを生成できます。行を1行加えただけです。MsgBoxの引数に注目してみましょう。A列の値を操作するオブジェクト.A列の文字を受け取って表示するメソッドとなっています。これは、生成したインスタンスですね。「A列の値を操作するクラス」という型のオブジェクトでした。「A列の文字を受け取って表示するメソッド」は「A列の値を操作するクラス」のクラスモジュールでFunctionプロシジャで作りました。クラスモジュールでクラスを作る標準モジュールでクラスを元にオブジェクトを作る作ったオブジェクトを標準モジュールで使う←今、ココが完了ここまでできたらF8を押して、一行ずつ実行してみましょう。MsgBoxを実行した瞬間にクラスモジュールに移り、メソッド(=クラスモジュールのFunctionプロシジャ)が実行する様子が確認できます。今回は値を戻したいだけなので、Functionプロシジャでメソッドの内容を記述しましたが、Subプロシジャでメソッドを記述する事もできます。これから、この「A列の値を操作するクラス」を充実させながら、クラスモジュールに慣れていきましょう。ユーザーが選択したファイルを開く実務的なオブジェクトを生成するをご覧下さい。それでは、頑張っていきましょう。ワークブックにチェック機能をつける今回はVBAで利用できるイベントについて解説していきます。日)1985年生まれの会社員。業務改善部隊に異動で芽を出し、現在に至る。本業での知識と経験を元に、ブログとTwitterで1生産性向上2業務改善3自動化について情報発信しています。【プログラミング】文法の勉強だけでは遠回り|挫折しない上達のコツ月別アーカイブはてなブログをはじめよう!mutable_yunさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。