更新日:、 作成日:
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 の数式を入力するときと同じ =数式 形式で設定します。
Formula と Formula2 の違い
Formula の他に Formula2 からも関数や数式を埋め込めます。スピルする数式を埋め込むときに違いがあります。
スピルの数式を入力するには 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)"
このように範囲の左上「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)"
別シートのセルに関数を入力する
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。
' 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 = "アクティブ"
スポンサーリンク