ユーザー定義関数で文字列を計算する

マクロ講座43回 
文字列として書かれた数式を計算するユーザー定義関数

文字列として書かれた数式を計算するマクロ

ユーザー定義関数の作成手順を理解する

前回は、ユーザー定義関数を利用するためのFunction プロシージャについての説明と、例として税抜き価格を求めるユーザー定義関数と、三角形の面積を求めるユーザー定義関数を紹介しました。

今回は、ユーザー定義関数にもっと慣れていただくために、
文字列を計算するユーザー定義関数立方根cube rootを計算するユーザー定義関数を作成します。
実務で使う為というより、ユーザー定義関数を作成する方法を理解するためのものになります。
ユーザー定義関数としての真価は、最後に紹介する、「文字列として入力された数値を使って立方根や平方根を求めるケース」となります。
★サンプルファイルは、こちらから 2013マクロ講座42回サンプルデータ

文字列を計算するユーザー定義関数

ユーザ定義関数を作るには、VBEエディターを起動し、Functionプロシージャの構文にそってコードを入力します。
ユーザー定義関数
次の例では、文字列としてセルに式を入力しています。
文字列なので通常は、Excelで計算することができませんが、ユーザー定義関数を使えば計算できます。
文字列を計算するユーザー定義関数
コードは、次のようになります。 VBAのコード部分には、Evaluate メソッドを使用しています。
Function CalcString(数式 As String) As Variant
    CalcString = Evaluate(数式)
End Function
    
文字列を計算するユーザー定義関数2
Evaluate メソッドは、テキスト形式の式を評価し、結果を返します。

立方根cube rootを計算するユーザー定義関数

ユーザ定義関数のサンプルマクロとして、今度は、立方根を計算するユーザー定義関数を作ります。
ExcelにはPOWER関数が用意されており、A2セルに数値として27が入力されている場合、B2セルに”=POWER(A2,1/3)”と数式を入力すれば、立方根が得られます。
ですから、こらから作成するユーザー定義関数を必ずしも作成する必要は事実上ありません。
ユーザー定義関数の作り方を学ぶ上で、シンプルな例はとてもわかりやすいので取り上げました。
Power関数
数値が入力されている場合のユーザー定義関数コードは
Function CubeRoot(num As Variant) As Variant
    CubeRoot = num ^ (1 / 3)
End Function
    
作成したユーザー定義関数をセルに入力します。
=CubeRoot(C1)とすると、
答えが出ます。
立方根を計算するユーザー定義関数
コード中にある、「^」(キャレット・ハット)は、あまり見かけない記号かもしれません。
べき算を演算子で表す時に、^ を使います。(キーボードの「へ」です)
平方根を求めるなら、次のようにします。
Function Root(num As Variant) As Variant
    Root = num ^ (1 / 2)
End Function    
    
立方根を計算するユーザー定義関数2

文字列を数値として評価しcube rootを計算するユーザー定義関数

最初に使ったEvaluate メソッドを使用すれば、セルに文字列として入力された数値を評価し、 立方根や平方根を求めるユーザー定義関数を作成することが可能です。
万が一入力されていた文字列が数値ではない場合に、エラーが出ないような回避コードも入力しましたので、少し長くなりました。 文字列数値で立方根を計算するユーザー定義関数2
'セルに文字列として入力された数値から立方根を求めるユーザー関数
Function CubeRootVer2(num As String) As Variant
    Dim value As Variant
    value = Application.Evaluate(num)
    If IsNumeric(value) Then
        CubeRootVer2 = value ^ (1 / 3)
    Else
        CubeRootVer2 = "数値ではありません"
    End If
End Function

  
以下は同様にEvaluate メソッドを使用してセルに文字列として入力された数値から、平方根を求めるユーザー定義関数を作成しました。 文字列数値で平方根を計算するユーザー定義関数2
'セルに文字列として入力された数値から平方根を求めるユーザー関数
Function RootVer2(num As String) As Variant
Dim value As Variant
  value = Application.Evaluate(num)
  If IsNumeric(value) Then
      RootVer2 = value ^ (1 / 2)
  Else
      RootVer2 = "数値ではありません"
  End If
End Function
  
ちなみに、WorkSheet上で、べき算をするにはPOWER関数を使うことができます。
POWER関数書式
POWER(数値 , 指数)
立方根を計算するユーザー定義関数3

今日の講義は以上です。お疲れ様でした。
ユーザー定義関数 関連ページ