オプションのパラメータにデフォルト値を提供する
オプションのパラメータのデフォルト値を指定することもできます。次の例では、オプションのパラメーターが関数プロシージャに渡されない場合、デフォルト値が返されます。
SubListText(xAsString,OptionalyAs_
整数=12345)
List1.AddItemx
List1.AddItemy
EndSub
PRivateSubCommand1_Click()
strName=yourname '2 番目のパラメータが指定されていません。
CallListText(strName) '「あなたの名前」と「12345」を追加します。
EndSub
不定数のパラメータの使用 一般に、プロシージャ呼び出しのパラメータの数は、プロシージャの説明のパラメータの数と同じである必要があります。 ParamArray キーワードを使用して、プロシージャが任意の数のパラメータを受け入れることを示すことができます。したがって、次のように合計を計算する Sum 関数を作成できます。
DimxAsInteger
DimyAsInteger
DimintSumAsInteger
SubSum(ParamArrayintNums())
ForEachxInintNums
y=yx
次へ
intSum=y
EndSub
PrivateSubCommand1_Click()
合計1,3,5,7,8
List1.AddItemintSum
EndSub
名前付きパラメータを使用して単純なステートメントを作成する
Visual Basic では、多くの組み込み関数、ステートメント、メソッドに対して、パラメーター値をすばやく渡すための名前付きパラメーター メソッドが提供されています。名前付きパラメータの場合、名前付きパラメータに値を割り当てることで、任意の数のパラメータを任意の順序で指定できます。これを行うには、名前付き引数を入力し、その後にコロン、等号、値 (MyArgument:=SomeValue) を入力します。これらの割り当ては、カンマで区切って任意の順序で並べることができます。次の例のパラメータの順序は、必須パラメータの順序と逆であることに注意してください。
FunctionListText(strNameAsString,OptionalstrAddressAsString)
List1.AddItemstrName
List2.AddItemstrAddress
EndSub
PrivateSubCommand1_Click()
ListTextstrAddress:=12345,strName:=あなたの名前
EndSub
上記の方法は、プロシージャに必ずしも指定する必要がないオプションのパラメータがいくつかある場合に便利です。
名前付きパラメータのサポートを確認する
どの関数、ステートメント、メソッドが名前付きパラメーターをサポートしているかを判断するには、コード ウィンドウで AutoQuickInfo 関数を使用するか、オブジェクト ブラウザーを確認するか、言語リファレンスを参照してください。名前付きパラメータを使用するときは、次の点に注意してください。
Visual Basic (VB) オブジェクト ライブラリのオブジェクトのメソッドは、名前付きパラメータをサポートしていません。 Visual Basic for Applications (VBA) オブジェクト ライブラリのすべての言語キーワードは、名前付きパラメーターをサポートしています。
構文では、名前付きパラメーターは太字と斜体で示されています。他のパラメータはすべて斜体のみです。
名前付きパラメータを使用する場合、必須パラメータの入力を省略できないことに注意することが重要です。省略できるのはオプションのパラメータのみです。 Visual Basic (VB) および Visual Basic for Applications (VBA) オブジェクト ライブラリの場合、[オブジェクト ブラウザー] ダイアログ ボックスはオプションのパラメーターを角括弧 [] で囲みます。
詳細については、言語リファレンスの ByVal、ByRef、Optional、および ParamArray を参照してください。
制御構造の概要
制御構造により、プログラムの実行の流れを制御できます。制御フロー ステートメントがチェックされない場合、プログラムはこれらのステートメントを左から右、上から下に実行します。一部の単純なプログラムは一方向のフローのみで作成でき、一部のフローは演算子の優先順位によって制御できますが、プログラミング言語の有効性と有用性は、構造とループを通じてステートメントの順序を変更できる機能から生まれます。
意思決定構造
Visual Basic プロシージャでは、条件式をテストし、テスト結果に基づいてさまざまなアクションを実行できます。
Visual Basic でサポートされる意思決定構造は次のとおりです。
1.もし...それから
2.If...Then...Else
3.ケースの選択
もし...それでは
If...Then 構造を使用して、1 つ以上のステートメントを条件付きで実行します。単一行の構文と複数行のブロック構文の両方を使用できます。
If条件Thenステートメント
If条件Then
ステートメント
EndIf
通常、条件は比較ですが、数値を計算する任意の式にすることができます。 Visual Basic は、この値を True または False として解釈します。ゼロ値は False、ゼロ以外の値はすべて True とみなされます。条件が True の場合、Visual Basic は then キーワードに続くすべてのステートメントを実行します。単一行または複数行の構文を使用してステートメントを条件付きで実行できます (次の 2 つの例は同等です)。
IfanyDate<NowThenanyDate=Now
IfanyDate<NowThen
anyDate=今
EndIf
注: If...Then の単一行形式では、EndIf ステートメントは使用されません。条件が True のときに複数行のコードを実行する場合は、複数行のブロック If...Then...EndIf 構文を使用する必要があります。
IfanyDate<NowThen
anyDate=今
Timer1.Enabled=False 'タイマー制御は無効です。
EndIf
もし...ならば...そうでなければ
If...Then...Else ブロックを使用して複数のステートメント ブロックを定義し、ステートメントの 1 つを実行します。
If条件1Then
[ステートメントブロック-1]
[ElseIf条件2Then
[ステートメントブロック-2]]...
[それ以外
[ステートメントブロック-n]]
EndIf
VisualBasic は最初に条件 1 をテストします。 False の場合、Visual Basic は True の条件が見つかるまで、condition2 などをテストします。 True の条件が見つかると、Visual Basic は対応するステートメント ブロックを実行し、EndIf に続くコードを実行します。オプションとして、どの条件も True でない場合に Visual Basic が実行する Else ステートメント ブロックを含めることができます。
If...Then...ElseIf は、If...Then...Else の単なる特殊なケースです。 ElseIf 句はいくつでも使用でき、まったく使用しないこともできることに注意してください。 ElseIf 節があるかどうかに関係なく、Else 節が存在する可能性があります。
たとえば、アプリケーションは、メニュー コントロールの配列内のどのコントロールがクリックされたかに基づいてアクションを実行できます。
PrivateSubmnuCut_Click(IndexAsInteger)
IfIndex=0Then '「カット」コマンド。
CopyActiveControl '共通プロシージャを呼び出します。
クリアアクティブコントロール
ElseIfIndex=1Then '「コピー」コマンド。
コピーアクティブコントロール
ElseIfIndex=2Then 'コマンドをクリアします。
クリアアクティブコントロール
それ以外の場合は「貼り付け」コマンド。
アクティブコントロールの貼り付け
EndIf
EndSub
If...Then 構造体には、いつでも ElseIf ブロックを追加できることに注意してください。ただし、各 ElseIf が同じ式を異なる数値と比較する場合、この構造を記述するのは面倒です。この場合、SelectCase 意思決定構造を使用できます。
詳細については、 『VisualBasic6.0 言語リファレンスマニュアル』の「If...Then...Else ステートメント」を参照してください。
ケースの選択
VisualBasic は、複数のステートメント ブロックの 1 つを選択的に実行できるように、If...Then...Else を置き換える SelectCase 構造を提供します。 SelectCase ステートメントの機能は If...Then...Else ステートメントと似ていますが、複数選択の場合は、SelectCase ステートメントの方がコードが読みやすくなります。
SelectCase は構造体上のテスト式を処理し、それを 1 回だけ評価します。次に、Visual Basic は式の値を構造内の各 Case の値と比較します。それらが等しい場合、Case に関連付けられたステートメント ブロックが実行されます。
SelectCasetest式
[Caseexpressionlist1]
[ステートメントブロック-1]]
[Caseexpressionlist2]
[ステートメントブロック-2]]
。
。
。
[CaseElse]
[ステートメントブロック-n]]
終了選択
各式リストは 1 つまたは複数の値のリストです。リストに複数の値がある場合は、値をカンマで区切ります。各ステートメントブロックには 0 個以上のステートメントが含まれます。
複数の Case がテスト式に一致する場合、最初に一致した Case に関連付けられたステートメント ブロックのみが実行されます。式リスト内の値がテスト式と一致しない場合、Visual Basic は CaseElse 句のステートメントを実行します (これはオプションです)。
たとえば、If...Then...Else の例の [編集] メニューにコマンドを追加するとします。これには ElseIf 句を追加するか、SelectCase を使用して関数を作成できます。
PrivateSubmnuCut_Click(IndexAsInteger)
SelectCaseIndex
Case0 「カット」コマンド。
CopyActiveControl '共通プロシージャを呼び出します。
クリアアクティブコントロール
Case1「コピー」コマンド。
コピーアクティブコントロール
Case2 「クリア」コマンド。
クリアアクティブコントロール
Case3 '貼り付けコマンド。
アクティブコントロールの貼り付け
CaseElse
frmFind.Show '見つかったダイアログ ボックスを表示します。
終了選択
EndSub
SelectCase 構造体は毎回先頭で式を評価することに注意してください。 If...Then...Else 構造は、ElseIf ステートメントごとに異なる式を評価します。 If ステートメントと各 ElseIf ステートメントが同じ式を評価する場合にのみ、If...Then...Else 構造を SelectCase 構造に置き換えることができます。
->