1章:連立方程式の解を求める計算式

  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)式の計算
     }
    }


  2. 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


  3. C言語とVBAの比較
     C言語とVBAの計算部分のサブルーチンはともに「CAL_MX()」として 定義しています。
     サブルーチン「CAL_MX()」の記述内容を比較すると大差が内容に 思えますが、VBAの方が以下の点で作成が容易です。
    1. VBAでは変数とそのタイプを厳密に定義する必要が無い。
       C言語では、使用する変数とそのタイプを厳密に定義する必要があります。
       これに対して、VBAでは、変数定義を省略できます。特に、サブルーチン内では変数の定義は省略できます。
       グローバル変数はVBAでも定義が必要となりますが、そのタイプは省略できます。

    2. VBAではサブルーチンとそのタイプを厳密に定義する必要が無い。
       C言語では、使用するサブルーチンとそのタイプを厳密に定義する必要があります。
       これに対して、VBAでは、サブルーチン定義を省略できます。

    3. VBAでは未定義の変数領域にデータを書き込もうとするとエラー表示してくれます。
       C言語では未定義の変数領域にデータを書き込もうとすると実行されてしまいます。
       未定義の変数領域は他のプログラムで使用されているため、パソコンにとっては致命的な エラー(バグ)となります。

       VBAのプログラムリストでは、パラメータの入力、計算結果の出力も記載しています。
       「計算実行」ボタンでサブルーチン「Main」を呼び出すと全ての処理が実行されます。
       これに対して、C言語では入出力の部分を省略しています。
       C言語ではVBAのように簡単には入出力の部分のサブルーチンを記載できないのです。 特にGUI(グラフィカル・ユーザ・インターフェイス)の入出力はやっかいです。

     上記理由により、VBAでのプログラミング時間はC言語と比較して格段に短くなります。



3章:VBA連立方程式フリーソフトに行く。

トップページに戻る。