呼び出されるプロシージャの種類を表すvbCallTypeのメンバを指定します。バリアント型および配列を指定できます。戻り値は、実行したメソッドまたはプロパティの取得値になります。第1引数はobjectなので、標準モジュールのプロシージャーをCallByName関数で実行することはできません。引数のデータ型により、処理を切り替えます。文字列型の場合、第1引数の文字を第2引数分繰り返します。数値型(各種あり)の場合、第1引数に第2引数を掛け算します。いずれも、第1引数のデータ型で戻します。データ型により動的に実行するメソッドを変更してみようということです。Multiについては、以下のよう書くこともできます。Functionさらに、先にクラスのインスタンスを作成するように書くこともできます。Subいずれも書き方の違いであり、実行結果とどれも同じになります。文章で説明するようなところはほとんどないので、とにかく、ステップイン(F8)で動作を確認してみましょう。文章で説明するより、実際に動かして、その挙動を確認してみるのが一番理解が進むはずです。実際に動作する関数は別々のものが実行されていることを確認してください。Multiとだけ書けば良いということになります。Function'・・・オブジェクト(クラス)も動的に変更すると先に、クラス(clsFunc)のVBAコードを全てThisWorkbookに貼り付けておいてください。(VBAコード全てをコピーして、ThisWorkbookに貼り付けてください。Multiの中で切り替えるようにするとより動的な感じになるでしょう。普通なら、クラスを複数作って切り替えるということになるでしょう。このような考え方をさらに進めていき、オブジェクト指向としの多態性を実現するには、Implementsステートメント(インターフェイス)を使うことになりますが、その説明はまたの機会に。最後にCallByName関数の処理速度は遅いです、当り前と言えば当り前の事です。(ただし遅いといっても、直接メソッド等を実行する場合に比べてということです。Caseで分岐すれば良いだけのことなのは言うまでもないでしょう。実際に、CallByName関数を使う機会はあまりないと思います。実務として使う必要が出てくるとしたら、こういう場合くらいではないかと思います。今回は、VBAプログラミングの学習の過程として、やっておいた方が良いだろうと言うことで取り上げてみました。多態性の必要性・便利さを少しでも理解してもらうための入り口としての記事になります。多態性とはどういうことなのかをざっくりと理解するだけで良いでしょう。Next)|VBA入門7.マクロって何?VBAって何?|VBA入門8.セルに文字を入れるとは(Range,Value)|VBA入門9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説10.ひらがな⇔カタカナの変換|エクセル基本操作トップマクロVBAVBAクラス入門クラスとCallByNameとポリモーフィズム(多態性)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。GASスプレッドシート入門スプレッドシート応用GAS入門GAS応用トップマクロVBAVBAクラス入門クラスとCallByNameとポリモーフィズム(多態性)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。