最終更新日:2019-10-07第107回.プロシージャーの引数Subプロシージャー、Functionプロシージャーにおける、引数リストの指定について説明します。引数は、呼び出し先のプロシージャーに渡すデータを指定するものです。呼び出される側のプロシージャーで受け取る記述についてのマクロVBA記述の説明になります。type]このarglistの指定についての解説になります。arglistは次の形式で指定します。defaultvalue]Optional省略可能です。指定した引数が省略可能であることを示します。付けて宣言する必要があります。ByVal省略可能です。その引数が、値渡しで渡されることを示します。ByRef省略可能です。その引数が、参照渡しで渡されることを示します。ParamArray省略可能です。最後の引数でのみ使用できます。配列であることを示します。使うと、任意の数の引数を渡すことができます。各キーワードと共に使うことはできません。varname必ず指定します。引数を表す変数名を指定します。変数の標準的な名前付け規則に従って指定します。type省略可能です。プロシージャに渡す引数のデータ型を指定します。いずれかを指定できます。指定されていない場合は、ユーザー定義型またはオブジェクトの種類を指定することもできます。defaultvalue省略可能です。任意の定数または定数式を指定します。指定したパラメータに対してのみ有効です。ParamArrayについてはここでは解説を省略します。配列になりますので、その前に配列を覚える必要があります。第133回.引数を不定数にするParamArraySubプロシージャー、Functionプロシージャーにおいて、引数リストの数を特定せず、不定個数の引数を渡せるよう可変にしたい場合があります。ワークシートの関数では、引数の個数が不定の関数が多数あります。このように、最後が「,...」となっていて、いくつでも(限度はありますが)指定できる関数です。以下で使用していますが、VBAクラスなので少々難解なVBAとなっています。VBAクラスの作り方:独自Rangeっぽいものを作ってみたクラスの作成は、標準モジュールで作成していた時とは様相が違い戸惑う部分も多いと思います、それは、初めてVBAに取り組んだ時の戸惑いと同じかもしれません。最初はとにかく慣れることが一番です、細かい文法や機能は、少し慣れてから改めて学んでも遅くはありません。ByValの値渡しとは変数の中のデータを渡すもので、呼出側の変数は影響を受けません。値渡しでは、呼び出し先で引数の値を変更しても、呼び出し元の引数は変更されません。ByRefの参照渡しとは変数そのものを渡すもので、呼出側の変数が影響を受けます。参照渡しでは、呼び出し先で引数の値を変更すると、呼び出し元の引数も変更されます。以下の使用例で、理解を深めて下さい。ByVal、ByRefについては、しっかり理解して下さい。詳細は、ByVal、ByRefについてByValが値渡し、ByRefが参照渡しです。ここまでは、どこにでも書いてありますし、なんとなく理解していても、実際の活用がなかなか出来ない事が多いようです。使用例を通じて、理解して下さい。上記のsample1を実行すると、2,3の順にメッセージ表示されます。Sub上記のsample1を実行すると、2,3の順にメッセージ表示されます。ByValもByRef指定していないので、ByRefとなっています。この場合、参照渡しとなり、Call元のプロシージャーの引数も変更されます。Sub上記のsample2を実行すると、1,1の順にメッセージ表示されます。ByValを指定しているので、値渡しとなっています。この場合、Call元のプロシージャーの引数は変更されません。Function上記sample3を実行すると、"引数テスト"、"引数省略値"の順にメッセージ表示されます。Optionalは、引数を省略であり、省略した場合の規定値を指定できます、上では"省略値"になります。引数について引数の使い方は、とても奥深いものです。この引数の使い方を見れば、その人のプログラミングスキルが分かるといっても過言ではないでしょう。奥深いがゆえに、使い方にこれが正解と言うものはありません。プログラミングにおいては、引数の使い方を常に工夫していくものです。プログラムを書くときは、常にもっと良い指定方法がないかといったことを考えます。引数の使い方を考えることは、プログラミングスキルを確実に向上させます。Next)|VBA入門7.マクロって何?VBAって何?|VBA入門8.セルに文字を入れるとは(Range,Value)|VBA入門9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説10.ひらがな⇔カタカナの変換|エクセル基本操作トップマクロVBAマクロVBA入門プロシージャーの引数このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。GASスプレッドシート入門スプレッドシート応用GAS入門GAS応用トップマクロVBAマクロVBA入門プロシージャーの引数このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。