円の公式とExcel VBA

最近は三次元CAD*1で3Dモデルを作成すると、体積や質量、重心などを自動で計算してくれる。だが時には、ササっと手計算することもあって、最近では専らExcelを使っている。
f:id:Infoment:20181020114539p:plain
そんな時は計算用のファイルを作成しておいて、使用頻度の高い値をユーザー定義関数に設定しておくと便利だ。

例えばよく使うのは重力加速度で、一般的にgで表される。
f:id:Infoment:20181020105124p:plain

高校物理で習う*2「物が落ちるときの時間と距離の関係」について、Excelで普通に数式を組むと、恐らくこんな感じになる。
f:id:Infoment:20181020111536p:plain
セルのアドレスと数値の羅列となっており、慣れた人ならいざ知らず、初見で理解するのは難しいと思う。

そこで、ユーザー定義関数でgを作成する。ついでに、セルに名前を付けておく。

' 重力加速度
Public Function g()
    ' 単位 m/s^2
    g = 9.80665
End Function

使い方は、Today関数などと同じだ。そうすると、こんな感じでスッキリする。
f:id:Infoment:20181020105849p:plain

このように少しでも、誰が見ても解るような内容が望ましいと思う。
ただし、上記のユーザー定義関数を持たないブックでは効果が無い。
f:id:Infoment:20181020110545p:plain
※上図は、セルの名前を定義済み。

予め配付する範囲を決めておかないと、自分の知らないところで迷惑を掛けるため注意が必要だ。


同様によく登場するのが、円および球に関する公式。

  1. 円の周長
  2. 円の面的
  3. 球の体積

これらに共通で登場するのは「半径r」であるため、まとめて一つの関数にする。

Option Explicit

Enum べき乗
    vb円周 = 1
    vb面積
    vb体積
    vb断面二次モーメント
End Enum

Public Function 円の公式(半径 As Double, 次数 As べき乗)
    ' Dim 係数(1 To 4) As Double 2018.11.1 ↓に改め
    Dim 係数(べき乗.vb円周 To べき乗.vb断面二次モーメント) As Double

        係数(1) = 2
        係数(2) = 1
        係数(3) = 4 / 3
        係数(4) = 1 / 4
    円の公式 = 係数(次数) * WorksheetFunction.Pi * 半径 ^ 次数
End Function

f:id:Infoment:20181020113714p:plain

これらの計算式を含むファイルは、勿論、他の方が作成したものを使用しても全然かまわない。ただ、出来れば以下の過程を経ることをお勧めしたい。

  1. 手計算で感覚をつかむ
  2. 計算式をExcelに入力することで、理解を深める
  3. 実際に使用しながら、使い勝手などを改善する

なぜなら計算式を理解しないまま使用すると、感覚がマヒしてしまい、例えば計算結果の桁が一つ違っていても気づけなくなる恐れがあるから。

以上、参考まで。

*1:主にパソコンなどで作図するための、コンピュータ支援設計ソフト

*2:もう30年近く前!?