Private Sub CommandButton1_Click()
Dim A(1 To 3) As Integer
Dim B(1 To 3) As Integer
Dim i As Integer
For i = 1 To 3
A(i) = Cells(i,1).value
Next i
Call MulMat(A, B)
For i = 1 To 3
Cells(i,2).value = B(i)
Next i
End Sub
Sub MulMat(A() As Integer, B() As Integer)
Dim i As Integer
For i = 1 To 3
B(i) = A(i) * 10
Next i
End Sub
(プログラム例7-2の結果)
プログラム例7-2は,配列サイズが3であるため,サブルーチンプロシージャ内でのループを3回に限定しているが,どのような配列サイズに対してもこのプロシージャが適用できるように汎用性を高めるためには,この「For 1 To 3」の部分を「For i = LBound(A, 1) To UBound(A, 1)」とする.ここで,LBound(A, 1) は配列Aの1次元目における下限要素番号で,UBound(A, 1)は上限要素番号を検出している.
(汎用性を高めた場合)
Sub Add(A() As Integer, B() As Integer)
Dim i As Integer
For i = LBound(A, 1) To UBound(A, 1)
B(i) = A(i) * 10
Next i
End Sub
Private Sub CommandButton1_Click()
Dim A(1 To 3, 1 To 2) As Integer
Dim B(1 To 3, 1 To 2) As Integer
Dim i As Integer, j As Integer
For i = 1 To 3
A(i, 1) = Cells(i,1).Value
A(i, 2) = Cells(i,2).Value
Next i
Call MulMat(A, B)
For i = 1 To 3
Cells(i,3).Value = B(i, 1)
Cells(i,4).Value = B(i, 2)
Next i
End Sub
Sub Add(A() As Integer, B() As Integer)
Dim i As Integer, j As Integer
For j = LBound(A, 2) To UBound(A, 2)
For i = LBound(A, 1) To UBound(A, 1)
B(i, j) = A(i, j) * 10
Next i
Next j
End Sub
(プログラム例7-3の結果)
プログラム例7-4:行列の加減 プログラム例5-7で示される行列の加算プロラムを汎用化してみる.
①「1-5節(1)」の①~⑩の手順でコマンドボタンを作成し,コードウィンドウを表示する.
②(プログラム例7-4)を入力する.
③ Excel表示ボタンでシートを表示し,デザインモードを解除する.
④ コマンドボタンをクリックすると,以下のように解析結果が表示される.
(プログラム例7-4)
Private Sub CommandButton1_Click()
Dim A(2, 3) As Integer
Dim B() As Integer
Dim C(2, 3) As Integer
A(1, 1) = 1
A(1, 2) = 2
A(1, 3) = 3
A(2, 1) = 4
A(2, 2) = 5
A(2, 3) = 6
B = A
CALL matAdd( A, B, C)
For i = 1 To 2
For j = 1 To 3
Cells(i, j).Value = C(i, j)
Next j
Next i
End Sub
Sub matAdd(A() As Integer,B() As Integer,C() As Integer)
Dim i As Integer, j As Integer
For i = 1 To UBound(A, 1)
For j = 1 To UBound(A, 2)
C(i, j) = A(i, j) + B(i, j)
Next j
Next i
End Sub
(プログラム例7-4の結果)
(注)サブルーチンの省略可能な引数
関数と同様に,仮引数の前にoptionalが付いている場合,呼び出し時に省略することができる.「Optional x As Integer = 1」とした場合,呼び出し時に省略されるとxのデフォルト値が1になる.
Private Sub CommandButton1_Click()
Dim A As Integer
Dim B As Integer
Dim C As Integer
A = 10
C = 20
Call optVar(A, B, C)
Range("A1").Value = B
Call optVar(A, B)
Range("b1").Value = B
End Sub
Sub optVar(A As Integer,B As Integer, _
Optional C As Integer=5)
Dim i As Integer, j As Integer
B = A + C
End Sub