ExcelマクロVBA入門 | 第107回.プロシージャーの引数 | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2013-09-04

第107回.プロシージャーの引数


Subプロシージャー、Functionプロシージャーにおける、引数リストの指定。


Sub name [(arglist)]

Function name [(arglist)] [As type]


このarglistの指定についての解説になります。


arglistは次の形式で指定します。


[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]


Optional

省略可能です。

指定した引数が省略可能であることを示します。

このキーワードを指定した場合、引数 arglist のそれ以降の引数も省略可能でなければならず、すべてキーワード Optional を付けて宣言する必要があります。

キーワード ParamArray を使った場合は、どの引数に対してもキーワード Optional は指定できません。

ByVal

省略可能です。

その引数が、値渡しで渡されることを示します。

ByRef

省略可能です。

その引数が、参照渡しで渡されることを示します。

Visual Basic では、既定値は ByRef です。

ParamArray

省略可能です。

引数 arglist の最後の引数でのみ使用できます。

その引数がバリアント型 (Variant) の要素を持つ省略可能 (Optional) な 配列であることを示します。

キーワード ParamArray を使うと、任意の数の引数を渡すことができます。ByVal、ByRef、Optional の各キーワードと共に使うことはできません。

varname

必ず指定します。

引数を表す変数名を指定します。

変数の標準的な名前付け規則に従って指定します。

type

省略可能です。

プロシージャに渡す引数のデータ型を指定します。

バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant) のいずれかを指定できます。

パラメータにキーワード Optional が指定されていない場合は、ユーザー定義型またはオブジェクトの種類を指定することもできます。

defaultvalue

省略可能です。

任意の定数または定数式を指定します。

キーワード Optional を指定したパラメータに対してのみ有効です。

データ型がオブジェクト型 (Object) の場合、明示的な既定値は Nothing だけです。


ParamArrayについては解説を省略します、配列になりますので、その前に配列を覚える必要があります。


以下の使用例で、理解を深めて下さい。


特に、ByVal、ByRefについては、しっかり理解して下さい。

詳細は、ByVal、ByRefについて



使用例.


Sub sample1()
  Dim i, j
  i = 1
  j = 1
  Call sub1(i, j)
  MsgBox i
  MsgBox j
End Sub
Sub sub1(arg1, arg2)
  arg1 = arg1 + 1
  arg2 = arg2 + 2
End Sub


上記のsample1を実行すると、2,3の順にメッセージ表示されます。


ByValもByRef指定していないので、ByRefとなっています。


この場合、参照渡しとなり、Call元のプロシージャーの引数も変更されます。



Sub sample2()
  Dim i, j
  i = 1
  j = 1
  Call sub2(i, j)
  MsgBox i
  MsgBox j
End Sub
Sub sub2(ByVal arg1, ByVal arg2)
  arg1 = arg1 + 1
  arg2 = arg2 + 2
End Sub

上記のsample2を実行すると、1,1の順にメッセージ表示されます。


ByValを指定しているので、値渡しとなっています。


この場合、Call元のプロシージャーの引数は変更されません。



Sub sample3()
  MsgBox func3("引数", "テスト")
  MsgBox func3("引数")
End Sub
Function func3(ByVal arg1 As String, Optional ByVal arg2 As String = "省略値") As String
  func3 = arg1 & arg2
End Function

上記sample3を実行すると、"引数テスト"、"引数省略値"の順にメッセージ表示されます。


Optionalは、引数を省略であり、省略した場合の規定値を指定できます、上では"省略値"になります。






同じテーマ「ExcelマクロVBA入門」の記事

第108回.変数の適用範囲(スコープ,Private,Public)
第109回.列挙型(列挙体)Enum
第110回.ユーザー定義型(構造体)Type
第111回.静的配列
第112回.動的配列(Redim)
第113回.配列に関連する関数
第114回.セル範囲⇔配列

新着記事 ・・・新着記事一覧を見る

空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.ひらがな⇔カタカナの変換|エクセル基本操作
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.定数と型宣言文字(Const)|ExcelマクロVBA入門



  • >
  • >
  • >
  • プロシージャーの引数

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    ↑ PAGE TOP