即効テクニック |
マクロを使って、セルにワークシート関数を入力するにはどうしたらいいでしょう。 わからないときはマクロ記録です。 アクティセルをセル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 SubFormulaプロパティは、セル内の数式を表すプロパティです。 セルに数式が入力されているとき、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