ユーザー定義関数で文字列を計算する
マクロ講座43回
文字列として書かれた数式を計算するマクロ
ユーザー定義関数の作成手順を理解する
前回は、ユーザー定義関数を利用するためのFunction プロシージャについての説明と、例として税抜き価格を求めるユーザー定義関数と、三角形の面積を求めるユーザー定義関数を紹介しました。
今回は、ユーザー定義関数にもっと慣れていただくために、
文字列を計算するユーザー定義関数と立方根cube rootを計算するユーザー定義関数を作成します。
実務で使う為というより、ユーザー定義関数を作成する方法を理解するためのものになります。
ユーザー定義関数としての真価は、最後に紹介する、「文字列として入力された数値を使って立方根や平方根を求めるケース」となります。
★サンプルファイルは、こちらから 2013マクロ講座42回サンプルデータ
文字列を計算するユーザー定義関数
ユーザ定義関数を作るには、VBEエディターを起動し、Functionプロシージャの構文にそってコードを入力します。
次の例では、文字列としてセルに式を入力しています。
文字列なので通常は、Excelで計算することができませんが、ユーザー定義関数を使えば計算できます。
文字列なので通常は、Excelで計算することができませんが、ユーザー定義関数を使えば計算できます。
コードは、次のようになります。
VBAのコード部分には、Evaluate メソッドを使用しています。
Function CalcString(数式 As String) As Variant CalcString = Evaluate(数式) End Function
Evaluate メソッドは、テキスト形式の式を評価し、結果を返します。
立方根cube rootを計算するユーザー定義関数
ユーザ定義関数のサンプルマクロとして、今度は、立方根を計算するユーザー定義関数を作ります。
ExcelにはPOWER関数が用意されており、A2セルに数値として27が入力されている場合、B2セルに”=POWER(A2,1/3)”と数式を入力すれば、立方根が得られます。
ですから、こらから作成するユーザー定義関数を必ずしも作成する必要は事実上ありません。
ユーザー定義関数の作り方を学ぶ上で、シンプルな例はとてもわかりやすいので取り上げました。
ExcelにはPOWER関数が用意されており、A2セルに数値として27が入力されている場合、B2セルに”=POWER(A2,1/3)”と数式を入力すれば、立方根が得られます。
ですから、こらから作成するユーザー定義関数を必ずしも作成する必要は事実上ありません。
ユーザー定義関数の作り方を学ぶ上で、シンプルな例はとてもわかりやすいので取り上げました。
数値が入力されている場合のユーザー定義関数コードは
Function CubeRoot(num As Variant) As Variant CubeRoot = num ^ (1 / 3) End Function
作成したユーザー定義関数をセルに入力します。
=CubeRoot(C1)とすると、
答えが出ます。
=CubeRoot(C1)とすると、
答えが出ます。
コード中にある、「^」(キャレット・ハット)は、あまり見かけない記号かもしれません。
べき算を演算子で表す時に、^ を使います。(キーボードの「へ」です)
べき算を演算子で表す時に、^ を使います。(キーボードの「へ」です)
平方根を求めるなら、次のようにします。
Function Root(num As Variant) As Variant Root = num ^ (1 / 2) End Function
文字列を数値として評価しcube rootを計算するユーザー定義関数
最初に使ったEvaluate メソッドを使用すれば、セルに文字列として入力された数値を評価し、
立方根や平方根を求めるユーザー定義関数を作成することが可能です。
万が一入力されていた文字列が数値ではない場合に、エラーが出ないような回避コードも入力しましたので、少し長くなりました。
万が一入力されていた文字列が数値ではない場合に、エラーが出ないような回避コードも入力しましたので、少し長くなりました。
'セルに文字列として入力された数値から立方根を求めるユーザー関数 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 メソッドを使用してセルに文字列として入力された数値から、平方根を求めるユーザー定義関数を作成しました。
'セルに文字列として入力された数値から平方根を求めるユーザー関数 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(数値 , 指数)
POWER関数書式
POWER(数値 , 指数)
今日の講義は以上です。お疲れ様でした。