マクロを使って、セルにワークシート関数を入力するにはどうしたらいいでしょう。
わからないときはマクロ記録です。
アクティセルをセル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