コンピュータが行う処理の記述 : 初めてのプロシージャの作成

更新 : 2007 年 11 月

このレッスンでは、プロシージャを作成する方法について説明します。プロシージャは、他のコード ブロックから実行できる独立したコード ブロックです。その後で、プロシージャのパラメータを作成する方法を説明します

プロシージャは、ある処理を実行するようプログラムに指示するための単なるコードのブロックです。既に前のレッスンでプロシージャを使用しています。たとえば、MsgBox 関数は、ダイアログ ボックスの表示という処理を実行する組み込みプロシージャです。

Visual Basic には、一般的な処理を実行するための組み込みプロシージャが数多く用意されていますが、組み込みプロシージャでは不可能な処理をプログラムで実行する必要のある状況が必ず発生します。たとえば MsgBox 関数は、画像付きのダイアログ ボックスを表示できません。このタスクを実行するには、独自のプロシージャを記述する必要があります。

プロシージャとは

プロシージャは、他のコード ブロックから実行できる独立したコード ブロックです。一般に各プロシージャには、1 つのタスクを実行するために必要なコードが含まれています。たとえば、wave ファイルを再生するために必要なコードを含んだ PlaySound というプロシージャを定義できます。プログラムで音を出す必要があるたびにサウンドを再生するためのコードを繰り返し記述することも可能ですが、プログラムのどこからでも呼び出せる単一のプロシージャを作成した方が合理的です。

プロシージャの起動、つまり実行は、コード内でそのプロシージャを呼び出すことによって行われます。たとえば、PlaySound プロシージャを実行するには、次のように、プロシージャの名前を含んだコードを 1 行追加するだけです。

PlaySound()

ただこれだけです。プログラムは、この行に達すると PlaySound プロシージャにジャンプし、そのプロシージャに含まれるコードを実行します。その後、プログラムは、PlaySound の呼び出しの次に記述されているコード行に戻ります。

プロシージャは、数の制限なく呼び出すことができます。プロシージャの実行は、呼び出された順序で行われます。たとえば、DisplayResults というプロシージャもあるとします。このプロシージャを PlaySounds プロシージャの実行後に実行するには、次のようにプロシージャを呼び出します。

PlaySounds()

DisplayResults()

関数とサブ

プロシージャには、関数 (Function) と サブルーチン (Sub) の 2 種類があります。関数が呼び出し元プロシージャに値を返すのに対し、サブルーチンはコードを実行するだけです。サブは、次の例のように、サブの名前を含むコード行がプログラムに追加されたときに呼び出されます。

DisplayResults

これに対して関数は、コードを実行するだけでなく値を返すため、異なる方法で呼び出されます。たとえば、曜日を示す Integer を返す GetDayOfWeek という関数があるとします。この関数を呼び出すには、まず戻り値を格納するための変数を宣言します。次に、その変数に戻り値を代入して後で使用できるようにします。コードは次のようになります。

Dim Today As Integer

Today = GetDayOfWeek

この例では、関数によって返された値は、後で利用できるよう、Today という名前の関数にコピーおよび格納されます。

プロシージャの記述

プロシージャの記述は、プロシージャの宣言を記述することから始まります。プロシージャの宣言では、いくつかのことを明示します。プロシージャが関数であるかサブルーチンであるかを記述し、プロシージャに名前を付けます。また、プロシージャが持つパラメータを詳細に記述します (パラメータについては、このレッスンの後半で詳しく説明します)。簡単なプロシージャの宣言の例を次に示します。

Sub MyFirstSub()
End Sub

Sub キーワードにより、このプロシージャがサブであり、値を返さないことが、プログラムに対して宣言されます。次に、サブの名前 (MyFirstSub) が宣言され、空のかっこにより、このプロシージャにはパラメータがないことが示されます。最後に、End Sub キーワードによってサブルーチンの終了が示されます。このサブによって実行されるすべてのコードは、これら 2 行の間に記述されます。

関数の宣言もこれと似ていますが、戻り値の型の指定 (Integer、String など) という手順が追加されます。たとえば、Integer を返す関数は次のようになります。

Function MyFirstFunction() As Integer
End Function

As Integer キーワードにより、この関数が Integer 値を返すことが示されます。関数から値を返すには、次の例に示すように Return キーワードを使用します。

Function GetTheNumberOne() As Integer
    Return 1
End Function

このプロシージャは数値 1 を返します。

やってみよう

プロシージャを作成するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスの [テンプレート] ペインで、[Windows アプリケーション] をクリックします。

  3. [プロジェクト名] ボックスに「MyFirstProcedure」と入力し、[OK] をクリックします。

    新しい Windows フォーム プロジェクトが開きます。

  4. フォームをダブルクリックしてコード エディタを開きます。

  5. コード エディタで End Class という行を確認します。これは、フォームを構成するコード セクションの末尾にあります。この行のすぐ前に、次のプロシージャを追加します。

    Function GetTime() As String
      Return CStr(Now)
    End Function
    

    この関数は、Now 組み込みプロシージャを使用して現在時刻を受け取り、次に CStr 関数を使用して、Now から返された値を人間が判読できる String に変換します。最後に、その String 値が関数の結果として返されます。

  6. 前の手順で追加した関数の上に、次の Sub を追加します。

    Sub DisplayTime()
      MsgBox(GetTime)
    End Sub
    

    このサブは、関数 GetTime を呼び出して、これによって返された値をメッセージ ボックスに表示します。

  7. 最後に、DisplayTime サブルーチンを呼び出す次の行を、Form1_Load イベント ハンドラに追加します。

    DisplayTime()
    
  8. F5 キーを押してプログラムを実行します。

    プログラムが起動すると、Form1_Loadイベント プロシージャが実行されます。このプロシージャは DisplayTime サブを呼び出します。したがって、プログラムの実行は DisplayTime サブ プロシージャに移動します。さらにこのサブは GetTime 関数を呼び出すため、プログラムの実行は GetTime 関数に移動します。この関数は、時間を表す String を DisplayTime サブ プロシージャに返し、このサブ プロシージャが、その文字列をメッセージ ボックスに表示します。サブの実行が終了すると、プログラムは通常どおり次へ進み、フォームが表示されます。

関数およびサブのパラメータ

プロシージャに追加情報を提供しなければならない場合もあります。たとえば、PlaySound プロシージャでは、複数の異なるサウンドのうちいずれかを再生する必要がある場合があります。どのサウンドを再生するかという情報を、パラメータを使用することによって提供できます。

パラメータは、変数によく似ています。パラメータは、変数と同様、型と名前を持ち、情報を格納します。またプロシージャ内で変数と同様に使用できます。パラメータと変数の主な違いは、次の 2 点です。

  • パラメータは、個別のコード行ではなく、プロシージャの宣言の中で宣言されます。

  • パラメータは、宣言されたプロシージャ内でのみ使用できます。

パラメータの宣言は、プロシージャ宣言の中の、プロシージャ名の後ろに続くかっこ内で行われます。As キーワードを使用して型が宣言されます。また、各パラメータの前には、通常 ByVal キーワードが付加されます。このキーワードは、ユーザーが追加しない場合、Visual Basic によって自動的に追加されます。このキーワードを使用すると、このレッスンでは示さない非常に高度な機能を実行できます。

パラメータを持つサブルーチンの例を次に示します。

Sub PlaySound(ByVal SoundFile As String, ByVal Volume As Integer)
  My.Computer.Audio.Play(SoundFile, Volume)
End Sub

このサブルーチンをパラメータの値を指定して呼び出すには、次のように記述します。

PlaySound("Startup.wav", 1)

関数のパラメータも、サブルーチンの場合と同様に宣言できます。

やってみよう

パラメータを持つ関数を作成するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスの [テンプレート] ペインで、[Windows アプリケーション] をクリックします。

  3. [プロジェクト名] ボックスに「parameters」と入力し、[OK] をクリックします。

    新しい Windows フォーム プロジェクトが開きます。

  4. ツールボックス から、フォームに 2 つの Textbox コントロールをドラッグします。

  5. ツールボックスから、フォームに Button コントロールをドラッグします。

  6. Buttonをダブルクリックしてコード エディタを開きます。

  7. Button1_Click イベント ハンドラの End Sub 行の直後に、次のプロシージャを追加します。

    Function AddTwoNumbers(ByVal N1 As Integer, ByVal N2 As Integer) _
      As Integer
      Return N1 + N2
    End Function
    
  8. Button1_Click プロシージャに次のコードを追加します。

    Dim aNumber As Integer = CInt(Textbox1.Text)
    Dim bNumber As Integer = CInt(Textbox2.Text)
    MsgBox(AddTwoNumbers(aNumber, bNumber))
    

    このコードは、2 つの integer を宣言し、2 つのテキスト ボックスに入力されたテキストを integer 値に変換します。その後、これらの値を AddTwoNumbers 関数に渡し、戻り値をメッセージ ボックスに表示します。

  9. F5 キーを押してプログラムを実行します。

  10. 各テキスト ボックスに数値を入力し、ボタンをクリックします。2 つの数値が加算され、その結果がメッセージ ボックスに表示されます。

次の手順

このレッスンでは、関数とサブの相違点、およびこれら 2 種類のプロシージャを作成する方法を説明しました。また、プロシージャの呼び出し方法、およびパラメータを受け取るプロシージャの作成方法も説明しました。

次のレッスンでは、For...Next ステートメントを使用して処理を繰り返す方法を説明します。

次のレッスン : 「プログラムでの処理の繰り返し : For...Next ループによるループ処理

参照

処理手順

比較 : 値を比較するための式の使用

概念

Visual Basic におけるプロシージャ