Excel Tips by pPoy

トップへ←Top    VBAへVBA  VBA基礎へVBA 基礎  一般へ一般  

Macro 文字列を式に変換する関数 《Evaluateメソッド》
(Excel97,Excel2000,Excel2002)
Excel で計算式をセルに入力する場合は、式の最初に 「=(イコール)」 を入力します。
もしくは、「+(プラス)」 か 「-(マイナス)」 記号に続けて式を入力します。
ところが、単純に 「100*1.5」 の様に入力すると、
漏れなく文字列として判断され、式として計算してくれません。

Excel 4.0 マクロ関数を使用することもできますが、これはシート単位で設定する必要があります。
それでは面倒なので、ユーザー定義関数を作ってみました。
セルに入力された文字列を式に変換後、計算結果を返す関数です。
以下のコードを標準モジュールに貼り付けてください。
Function myEvalAry(ParamArray ItemR()) As Variant
'引数を文字列結合後数式に変換し演算結果を返す関数
'配列を丸ごと渡すことも可(配列のネストは1回のみ)
'2006/03/04 pPoy
    Dim re As Variant
    Dim strTmp As String
    Dim varR As Variant
    Dim i As Variant, j As Variant
    
    strTmp = ""
    varR = ItemR()

    For Each i In varR
        If IsArray(i) Then
            '引数が配列の場合
            For Each j In i
                If IsNumeric(j) Then
                    re = CStr(j)
                Else
                    re = j
                End If
                strTmp = strTmp & re
            Next
        Else
            '引数が配列以外
            If IsNumeric(i) Then
                re = CStr(i)
            Else
                re = i
            End If
            strTmp = strTmp & re
        End If
    Next
    myEvalAry = Application.Evaluate(strTmp)
End Function
この頁のTOPへTop
≪使い方≫

使い方1

通常の関数と同様に、
=」 に続けてセルに入力します。

 =myEvalAry(セル番地)

使い方2

入力後エンターを押すと、
無事に計算結果が表示されます。
使い方3

複数セル範囲を引数として、
計算させることもできます。

 =myEvalAry(セル番地:セル番地)

この例では、A3 から C3 までの
範囲を引数に指定しています。



10*0.5-(100/5) の計算結果として、-15 が返ります。
≪注意≫
  • この関数は、引数としてセル番地を範囲指定することができます。
     例: =myEvalAry(A1:C1)

    カンマで区切って入力することもできます。
     例: =myEvalAry(A1,B1,C1)

  • このマクロでは引数として配列も渡せますが、配列の中に配列を入れて渡すことはできません。

  • この関数をワークシートに入力した場合、シートの再計算の度にマクロも再計算されます。
    シートに大量に使用するとレスポンスが悪くなると思います

  • Excel 4.0 マクロ関数を使用する方法は、こちら や、こちら を参照してください。


この頁のTOPへTop
【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。
又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

Copyright(C) pPoy 2006-2010