Excel VBAでセルに数式を入力する:Formula,FormulaR1C1

セルに数式を入力するには、Formulaを使用します。

Formula関数の使い方

Object.Formula = "数式"
  • Object:Rangeオブジェクト、またはCellsオブジェクトで指定します。

数式部分には四則演算記号のほかに、SUM(合計)やAVERAGE(平均)、VARP(分散)なども設定できます。

使用例

Formula関数を使ってセルに値を入力していきます。下記のマクロをご覧ください。

Sub Formula_Sample()
 Range("B1:B6").Formula = "=A1*100"
 Range("C1:C6").Formula = "=A1+B1"
 Range("D1:D6").Formula = "=$A$1+$B$1"
End Sub

[実行結果]

B・C列は、行が下がるにつれて対応するセルも移動しています(相対参照)。一方D列は絶対参照です。Excelワークシートと同じく「$」で絶対参照であることを示します。

FormulaR1C1関数の使い方

FormulaR1C1でも数式を扱うことができます。数式内でセルを扱うとき、行番号と列番号でセルを指定します。RはRow(行)、CはColumn(列)の略です。たとえば、セルA2はR1C2、セルC2はR3C2となります。

数式を相対参照で設定できるため、複数のセル範囲を一度に設定できます。相対参照の場合、基準となるセル(=行頭で設定したセル)からいくつセルがずれるかを指定します。

'以下の式はすべて同じ結果です。
Range("D3").Formula = "=A1+D2"             
Range("D3").FormulaR1C1 = "=R1C1+R4C2"     
Range("D3").FormulaR1C1 = "=R[-2]C[-3]+RC[-1]" 

いくつのセルを動くかを、下または右にずれるときはプラス、上または左にずれるときはマイナスで指定します。

使用例

FormulaR1C1関数は、通常のFormula関数より扱いが難しく思えますが、プログラムの中で取得した行番号と列番号を使った数式を示したいとき便利です。以下は、最終列の次の列のセルに、最終列までの合計を示すマクロです。

Sub FormulaR1C1_sample()
    Dim LastR As Long, LastC As Long

    LastR = Range("A1").End(xlDown).Row '最終行を求めます。   
    LastC = Range("A1").End(xlToRight).Column '最終列を求めます。
    
    Cells(1, LastC + 1).Resize(LastR).FormulaR1C1 = "=SUM(RC[" & -LastC & "]:RC[-1])"
End Sub