HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > ワークシート関数を入力する

即効テクニック

セル操作関連のテクニック

ワークシート関数を入力する

(Excel 97/2000/2002/2003/2007)
マクロを使って、セルにワークシート関数を入力するにはどうしたらいいでしょう。
わからないときはマクロ記録です。
アクティセルをセルA4に置いて「=SUM(A1:A3)」という関数を入力してみます。
この操作をマクロ記録すると、次のようなコードが記録されます。

Sub Macro1()
    Selection.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
End Sub
記録されたFormulaR1C1プロパティは、数式をR1C1形式で設定・取得するプロパティです。 設定された数式は「=SUM(R[-3]C:R[-1]C)」と、確かにR1C1形式になっています。 しかし、実際には、セルA4に入力された関数は「=SUM(A1:A3)」です。 このように、関数を入力する操作をマクロ記録すると、Excelの設定が「A1形式」であってもR1C1形式で記録されます。 このことから、マクロで関数を代入するときは、R1C1形式でなければならない…と誤解している人がけっこういるようです。そんなことはありません。 たとえば上記のSUM関数は、次のようなマクロで代入できます。
Sub Sample1()
    Range("A4").Formula = "=SUM(A1:A3)"
End Sub
Formulaプロパティは、セル内の数式を表すプロパティです。 セルに数式が入力されているとき、RangeオブジェクトのValueプロパティでは数式の計算結果が返ります。 そうではなく、入力されている数式そのものを取得するには、このFormulaプロパティを使います。
Sub Sample2()
    MsgBox Range("A4").Formula
End Sub
また、任意のセルに数式が入力されているかどうかは、RangeオブジェクトのHasFormulaプロパティで判定できます。 セルに数式が入力されていると、HasFormulaプロパティはTrueを返します。
Sub Sample3()
    If Range("A4").HasFormula = True Then
        MsgBox Range("A4").Formula
    Else
        MsgBox "数式は入力されていません"
    End If
End Sub