- セルにVBAで関数を入れたい
- 手動で数式を打ち込むのが面倒
- VBAのFormulaとFormulaR1C1の違いを知りたい
今日は「VBAでセルに数式(Formula)を入れる方法」を解説します。
この記事を読めば、Formulaの使い方でつまずくことはゼロになります。
Contents
結論:Formulaはこの形でOKです
Range("B2").Formula = "=SUM(A2:A10)"
めっちゃ簡単ですよね。
基本の使い方(Formula)
Sub SetFormulaBasic()
Range("C1").Formula = "=A1+B1"
End Sub
このコードを実行すると、C1セルに =A1+B1
という数式が入ります。
セル参照はA1形式で指定するのがポイント。
【応用①】変数を使って柔軟に
Sub SetFormulaWithVariable()
Dim col As String
col = "D"
Range(col & "2").Formula = "=SUM(A2:C2)"
End Sub
このように、変数と組み合わせると動的な書き込みも可能です。
【応用②】FormulaR1C1との違いって?
Sub UseFormulaR1C1()
Range("C1").FormulaR1C1 = "=R1C1+R1C2"
End Sub
A1形式じゃなくて、「行・列」で数式を記述したいときは FormulaR1C1
を使います。
たとえば、下に向かって自動的に列をずらしたいときは以下です。
Sub FillDownFormula()
Range("C2:C10").FormulaR1C1 = "=RC[-2]+RC[-1]"
End Sub
【応用③】数式を一括で入れる(範囲指定)
Sub InsertFormulaToRange()
Range("D2:D100").Formula = "=A2+B2+C2"
End Sub
この書き方でも動きますが、相対参照になるため注意。
「全部の行でちゃんと動く?」という場合は、R1C1
形式がおすすめ。
【応用④】ワークシート関数を使う(WorksheetFunctionとの違い)
Range("B1").Formula = "=VLOOKUP(A1, Sheet2!A:B, 2, FALSE)"
これは文字列として数式を入れる方法。
一方で、VBAで計算した結果を直接入れたい場合はこうです。
Range("B1").Value = Application.WorksheetFunction.VLookup("商品1", Sheets("Sheet2").Range("A:B"), 2, False)
この違い、意外と重要です。
【補足】FormulaLocalを使うと関数が日本語でもOK
Range("C1").FormulaLocal = "=SUM(A1:A10)"
日本語環境で、英語関数がうまく動かないときはFormulaLocal
で対応可能です。
まとめ:Formulaを使えばVBAの自動化が加速する
用途 | 方法 |
---|---|
基本の数式 | Formula |
相対参照でずらしたい | FormulaR1C1 |
日本語関数を使う | FormulaLocal |
結果だけ入れたい | WorksheetFunction |
おまけ:表の末尾に合計を入れるVBAマクロ
Sub AddTotalRow()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("B" & lastRow + 1).Formula = "=SUM(B2:B" & lastRow & ")"
End Sub
「VBAでちょっとした自動化をしたい…」という人は、まずFormulaから入るとスムーズです。
コメント