1章:連立方程式の解を求める計算式
- C言語のサブルーチン
1章:連立方程式の解を求める計算式をC言語で書くと以下のようになります。
//連立方程式の解を求めるルーチン(C言語)
int Mn;//連立数を設定します。
double MA[101][101];//MA[i][j]=Aijの値を設定します。i=行、j=列
double MB[101];//MB[i]=Biの値を設定します。i=行
double MX[101];//MX[j]=Xjの値が格納されます。j=列
//上記の変数Mn、MA[101][101]、MB[101]はあらかじめ設定する必要があります。
//以下のサブルーチンを実行するとMX[101]に計算結果が格納されます。
void CAL_MX()
{
int i,j,k;
double Akk,Aik,SX;
for(k=1;k<=Mn;k++)//Aij消去操作の繰り返し
{
for(i=k+1;i<=Mn;i++)//連立数分の繰り返し計算
{
Akk=MA[k][k];
Aik=MA[i][k];
MB[i]=MB[i]*Akk-Aik*MB[k];//(6.2)式の計算
for(j=1;j<=Mn;j++)//(6.1)式の計算
{
MA[i][j]=MA[i][j]*Akk-Aik*MA[k][j];
}
}
}
MX[Mn]=MB[Mn]/MA[Mn][Mn];//(7.1)式の計算
for(k=Mn-1;k>=1;k--)//Xjを求める計算の繰り返し
{
SX=0;
for(j=k+1;j<=Mn;j++)
{
SX=SX+MA[k][j]*MX[j];
}
MX[k]=(MB[k]-SX)/MA[k][k];//(8.1)式の計算
}
}
- VBAのサブルーチン
1章:連立方程式の解を求める計算式をVBAで書くと以下のようになります。
Dim Mn As Integer '連立数を設定します。
Dim MA(101, 101) As Double 'MA[i][j]=Aijの値を設定します。i=行、j=列
Dim MB(101) As Double 'MB[i]=Biの値を設定します。i=行
Dim MX(101) As Double 'MX[j]=Xjの値が格納されます。j=列
Sub Main()
InData
CAL_MX
OutData
End Sub
Sub InData() 'データ入力
Mn = Sheets("Sheet1").Cells(5, 2).Value
For i = 1 To Mn Step 1
MB(i) = Sheets("Sheet1").Cells(6 + i, 2).Value
For j = 1 To Mn Step 1
MA(i, j) = Sheets("Sheet1").Cells(6 + i, 3 + j).Value
Next j
Next i
End Sub
Sub CAL_MX()
Dim i, j, k As Integer
Dim Akk, Aik, SX As Double
For k = 1 To Mn Step 1 'Aij消去操作の繰り返し
For i = k + 1 To Mn Step 1 '連立数分の繰り返し計算
Akk = MA(k, k)
Aik = MA(i, k)
MB(i) = MB(i) * Akk - Aik * MB(k) '(6.2)式の計算
For j = 1 To Mn Step 1 '(6.1)式の計算
MA(i, j) = MA(i, j) * Akk - Aik * MA(k, j)
Next j
Next i
Next k
MX(Mn) = MB(Mn) / MA(Mn, Mn) '(7.1)式の計算
For k = Mn - 1 To 1 Step -1 'Xjを求める計算の繰り返し
SX = 0
For j = k + 1 To Mn Step 1
SX = SX + MA(k, j) * MX(j)
Next j
MX(k) = (MB(k) - SX) / MA(k, k) '(8.1)式の計算
Next k
End Sub
Sub OutData() 'データ出力
For j = 1 To 100 Step 1
Sheets("Sheet1").Cells(5, 3 + j).Formula = ""
Next j
For j = 1 To Mn Step 1
Sheets("Sheet1").Cells(5, 3 + j).Value = MX(j)
Next j
End Sub
- C言語とVBAの比較
C言語とVBAの計算部分のサブルーチンはともに「CAL_MX()」として
定義しています。
サブルーチン「CAL_MX()」の記述内容を比較すると大差が内容に
思えますが、VBAの方が以下の点で作成が容易です。
- VBAでは変数とそのタイプを厳密に定義する必要が無い。
C言語では、使用する変数とそのタイプを厳密に定義する必要があります。
これに対して、VBAでは、変数定義を省略できます。特に、サブルーチン内では変数の定義は省略できます。
グローバル変数はVBAでも定義が必要となりますが、そのタイプは省略できます。
- VBAではサブルーチンとそのタイプを厳密に定義する必要が無い。
C言語では、使用するサブルーチンとそのタイプを厳密に定義する必要があります。
これに対して、VBAでは、サブルーチン定義を省略できます。
- VBAでは未定義の変数領域にデータを書き込もうとするとエラー表示してくれます。
C言語では未定義の変数領域にデータを書き込もうとすると実行されてしまいます。
未定義の変数領域は他のプログラムで使用されているため、パソコンにとっては致命的な
エラー(バグ)となります。
VBAのプログラムリストでは、パラメータの入力、計算結果の出力も記載しています。
「計算実行」ボタンでサブルーチン「Main」を呼び出すと全ての処理が実行されます。
これに対して、C言語では入出力の部分を省略しています。
C言語ではVBAのように簡単には入出力の部分のサブルーチンを記載できないのです。
特にGUI(グラフィカル・ユーザ・インターフェイス)の入出力はやっかいです。
上記理由により、VBAでのプログラミング時間はC言語と比較して格段に短くなります。
3章:VBA連立方程式フリーソフトに行く。
トップページに戻る。