[VBA] 2 次方程式の解を配列で返すユーザー定義関数

 2 次方程式の係数を入力して解を配列で返す 関数を作ってみました。
 ワークシートでも簡単に扱えるので、ぜひご利用ください。

2 次方程式の解を配列で返す関数

 2 次方程式 $ax^2+bx+c=0$ の解 $x_1,\:x_2$ を
 
\[x_1=\frac{-b-\sqrt{D}}{2a},\quad x_2=\frac{-b+\sqrt{D}}{2a}\]
とします。ただし $D=b^2-4ac$ です。QUAD関数は解を次のような 2 行 2 列の配列で返します。

 VBA 2次方程式の解の配列

 $a=0$ のときは 1 次方程式なので $x_1=-c/b$ として、$x_2$ の値は空となります。
 また $D=0$ のとき、すなわち方程式が重解をもつときは $x_1$ にのみ値が入ります。

 '2次方程式の解を配列で返します
 (C)BlogCat http://excelmath.atelierkobato.com/quad/

 Function QUAD(a As Double, b As Double, c As Double)

 Dim d As Double
 Dim sqd As Double
 Dim x(2, 2) As Variant

 d = b ^ 2 - 4 * a * c
 sqd = Sqr(Abs(d))

 If a = 0 Then

 x(1, 1) = -c / b
 x(1, 2) = 0
 x(2, 1) = ""
 x(2, 2) = ""

 ElseIf d = 0 Then

 x(1, 1) = -b / (2 * a)
 x(1, 2) = 0
 x(2, 1) = ""
 x(2, 2) = ""

 ElseIf d < 0 Then

 x(1, 1) = -b / (2 * a)
 x(1, 2) = -sqd / (2 * a)
 x(2, 1) = -b / (2 * a)
 x(2, 2) = sqd / (2 * a)

 Else

 x(1, 1) = (-b - sqd) / (2 * a)
 x(1, 2) = 0
 x(2, 1) = (-b + sqd) / (2 * a)
 x(2, 2) = 0

 End If

 QUAD = x

 End Function

 試しに $x^2+x+1=0$ の解を求めてみます。
 2 行 2 列のセル範囲を選択して

=QUAD(1,1,1)

と入力して [Ctrl] + [Shift] + [Enter] を押すと値が返ります。

 VBA QUAD関数 2次方程式解を表示①

 すなわち $x^2+x+1=0$ の解は
 
\[x_1=-0.5-0.866i,\quad x_2=-0.5+0.866i\]
となります。次は $x^2-2x+1=0$ の解を求めてみましょう。

=QUAD(1,-2,1)

と入力して [Ctrl] + [Shift] + [Enter] を押します。

 VBA QUAD関数 2次方程式解を表示②

 この方程式は重解 $x=1$ をもつので $x_2$ には値が入りません。

 ≫ VBA 数値計算トップページ

スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください