VBA講座08 ヘロンの公式で三角形の面積を求めます

 VBA 数学マクロ入門講座の8回目。
 前回に引き続いてファンクションマクロ(ユーザー定義関数)です。今回は 3辺の長さ a, b, c を与えて三角形の面積を求めるマクロ を作ってみたいと思います。
 

ヘロンの公式

 3辺の長さが与えられた場合、三角形の面積は ヘロンの公式
\[S=\sqrt{s(s-a)(s-b)(s-c)}\]によって与えられます。ここに \(2s=a+b+c\) です。
 

三角形の面積を計算するマクロ

 ヘロンの公式を用いて三角形の面積を計算するファンクションマクロです。

 Function HERON(a As Double, b As Double, c As Double) As Variant

 Dim s As Double, t As Double

  s = (a + b + c) / 2
  t = s * (s - a) * (s - b) * (s - c)

  If t <= 0 Or a <= 0 Or b <= 0 Or c <= 0 Then
   HERON = CVErr(xlErrNum)

  Else
   HERON = Sqr(t)

  End If

 End Function

 ワークシートでセルに

=HERON(1,1,1)

と入力すると正三角形の面積 0.433 を返します。しかし

=HERON(2,1,1)

のような値で入力するとエラーとなります。このような三角形が存在しえないことは図を描いてみるとすぐにわかります。

Variant型変数

 HERON関数の戻り値のデータ型は Variant型で宣言しています。Variant はどんな型のデータでも格納できる便利なデータ型です。戻り値が数値でなくエラーメッセージとなる可能性があるので、この型を選んでいます。

面積の2乗を計算させています

 面積 S ではなく、S の2乗を計算させて変数 t に入れています。三角形の各辺の長さは自由にとれるわけではなく、

2辺の長さを加えた値は他の一辺の長さより大きい

という条件で束縛されています。したがって (a, b, c) の値がおかしいと t が 0 になったり負になったりします。これを次の条件分枝で上手く使うのです。

Ifステートメント

 入門講座では初めてとなる、条件分枝を記述する Ifステートメントが登場しています。

If 条件 Then

の下に [条件] を満たした場合の処理を記述し、

Else

の下に [条件] を満たさなかった場合の処理を記述します。最後に

End If

で結びます。

If t <= 0 Or a <= 0 Or b <= 0 Or c <= 0 Then

は「 t が 0 かまたは負である、あるいは a, b, c いずれかの値が 0 以下である」(ユーザーさんが変な値を入れたときの対応です)という条件文で、そのとき

HERON = CVErr(xlErrNum)

としています。CVErr はエラーメッセージを返す関数で、引数 [xlErrNum] によって「数式で使用される数値に問題があります」というメッセージが指定されています。 CVErr の詳細に関しては必要な時にヘルプを参照すればよいので、特に覚える必要はありません。t が正の値であるときに限って

HERON = Sqr(t)

によって三角形の面積を計算します。この Sqr は平方根を計算する VBA関数です。VBA関数はプロパティやメソッドと異なり、オブジェクトとは無関係に機能するステートメントです。

 ≫ IF...Then...Elseステートメント
 ≫ 数学マクロ講座トップページへ戻る

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

コメントをどうぞ

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

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