更新日:、 作成日:

VBA セルに関数や数式を入れる (Range.Formula)

はじめに

Excel VBA マクロでセルに関数や数式を入れる方法を紹介します。

Range("B1").Formula または Cells(1, 2).Formula プロパティから、セル「B1」に関数や数式を埋め込むことができます。

Formula2 プロパティから、セルにスピルする数式を埋め込むことができます。

関数と数式は同じものです。

関数や数式を取得するには「セルの関数や数式を取得する」をご覧ください。
セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。

セルに関数や数式を入力する

Range の引数にセル名を指定すると、そのセルに関数や数式を入力できます。

セル「A1」に関数や数式を埋め込むには Range("A1").Formula を入力します。

Range("A1").Formula = "=SUM(A2:A3)"

Cells の引数にセルの行と列の番号を指定すると、そのセルに関数や数式を入力できます。

行「2」、列「A」に関数や数式を埋め込むには Cells(2, 1).Formula を入力します。

Cells(2, 1).Formula = "=SUM(B1:B2)"

入力する値は、Excel の数式を入力するときと同じ =数式 形式で設定します。

4
セルに値を入力するには「セルに値を入力する」をご覧ください。

Formula と Formula2 の違い

Formula の他に Formula2 からも関数や数式を埋め込めます。スピルする数式を埋め込むときに違いがあります。

スピルは 365 または 2021 から使用できます。
スピルについて詳しくは「エクセル スピル、動的配列数式の使い方」をご覧ください。

スピルの数式を入力するには Formula2 に入力します。

Formula にスピルの数式を入力すると、セルの範囲に @ が付いてスピルしない数式になります。

Range("A1").Formula = "=B1:B3"  ' =@B1:B3 になりスピルされない
Range("A1").Formula2 = "=B1:B3" ' A1:A3 にスピルされる

@ を付けてスピルさせない数式を入力するときも Formula2 に入力します。

Formula にスピルさせない数式を入力すると、セルの範囲にも @ が付いてエラーになります。

Range("A1").Formula = "=@LEN(B1:B3)"  ' =@LEN(@B1:B3) になりエラー
Range("A1").Formula2 = "=@LEN(B1:B3)" ' スピルされない

セルの範囲に関数を入力する

セルの範囲「A3」~「B4」に関数や数式を埋め込むには Range("A3:B4").Formula または Range("A3", "B4").Formula を入力します。

Range("A3:B4").Formula = "=SUM(A1:A2)"
Range("A3", "B4").Formula = "=SUM(A1:A2)"
2

このように範囲の左上「A3」を基準にして関数が入力されます。これはセル「A3」をコピーして「A3」~「B4」に貼り付けしているのと同じ動作です。

  • A3:"=SUM(A1:A2)"
  • A4:"=SUM(A2:A3)"
  • B3:"=SUM(B1:B2)"
  • B4:"=SUM(B2:B3)"

同じセルを参照するには、絶対参照で入力します。

Range("A3:B4").Formula = "=SUM($A$1:$A$2)"
3

別シートのセルに関数を入力する

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
' Sheet1 のセル「A3」に関数を設定
Worksheets("Sheet1").Range("A3").Formula = "=SUM(A1:A2)"
Worksheets(1).Range("A3").Formula = "=SUM(A1:A2)"

' Sheet2 のセル「A3」に関数を設定
Worksheets("Sheet2").Range("A3").Formula = "=SUM(A1:A2)"
Worksheets(2).Range("A3").Formula = "=SUM(A1:A2)"

Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。

' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"

標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。

' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"