②(プログラム例6-1)を入力する.「DegToRad」が度をラジアンに変換するユーザー作成の関数である.ここで,呼び出したときの引数名d(実引数),関数側の引数名Deg(仮引数)が異なっている.このように,呼び出し側の引数と関数側の引数の名前は一致している必要はなく型の整合性さえとれていればよい.ここでは,仮引数Degは実引数と同じ型になるよう,「Deg As Single」のように,型宣言とともにコーディングしている.関数から値を返すため,プロシージャ本体において,変換後の値をDegtoRadに代入している.
③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
④ セルA1に変換したい角度を度で記入する.
⑤ コマンドボタンをクリックすると,A2にラジアンに変換された値が表示される.
(プログラム例6-1)
Private Sub CommandButton1_Click()
Dim d As Single
d = Range("A1").Value
Range("A2").Value = DegToRad(d)
End Sub
Function DegToRad(Deg As Single) As Single
Dim pai As Single
pai = 3.141593
DegToRad = Deg / 180# * pai
End Function
Private Sub CommandButton1_Click()
Dim MatA(3) As Integer
Dim i As Integer, Total As Integer
For i = 1 To 3
MatA(i) = Cells(i,1).value
Next i
Total = VectSum(MatA())
Range("B1").Value = Total
End Sub
Function VectSum(MatA() As Integer) As Integer
Dim i As Integer
VectSum = 0
For i = 1 To 3
VectSum = VectSum + MatA(i)
Next i
End Function
(プログラム例6-2の結果)
このプログラムでは,配列サイズが3であるため,サブルーチンプロシージャ内でのループを3回に限定しているが,どのような配列サイズに対してもこのプロシージャが適用できるようにするためには,この「For 1 To 3」の部分を「For i = 1 To UBound(MatA, 1)」とする.ここで, UBound(MatA,1)は,配列MatAの1次元の上限要素番号を検出している.右の例はプログラム例6-2の汎用性を高めたプログラム例で,UBound(MatA,1)=3である.
(汎用性を高めた場合)
Function VectSum(MatA() As Integer) As Integer
Dim i As Integer
VectSum = 0
For i = 1 To UBound(MatA, 1)
VectSum = VectSum + MatA(i)
Next i
End Function
Private Sub CommandButton1_Click()
Dim MatA(3,2) As Integer
Dim Total As Integer
Dim i As Integer, j As Integer
For i = 1 To 3
For j = 1 to 2
MatA(i, j) = Cells(i,j).Value
Next j
Next i
Total = MatSum(MatA())
Range("C1").Value = Total
End Sub
Function MatSum(MatA() As Integer) As Integer
Dim i As Integer, j As Integer
MatSum = 0
For j = 1 To UBound(MatA, 2)
For i = 1 To UBound(MatA, 1)
MatSum = MatSum +MatA(i, j)
Next i
Next j
End Function
(プログラム例6-3の結果)
(注)省略可能な引数 仮引数の前にoptionalが付いている場合,呼び出し時に省略することができる.また,「Optional x As Integer = 1」とした場合,呼び出し時に省略されるとxのデフォルト値が1になる.