VBATips

Rangeに.Formulaは必要?不必要?省略しても良い?【ExcelVBA】

Rangeの数式の取得や数式入力はFormulaプロパティ

セルへ数式を反映する【Formulaプロパティ】【ExcelVBA】で説明していますが、
通常、VBAでセルに数式を反映する場合は.Formulaをつけます。

'(例)
  Range("A1").Formula = "=SUM(B1:E1)"
  Cells(2, 1).Formula = "=B2&C2"

Formulaプロパティがなくても同様の動作となる

Web上にサンプルが豊富にあるVBAマクロのコードでは、
Formulaを付けない(省略された)コードも多く見受けられます。

これはどちらも正解で、Range、Cellsの場合、省略された場合は.Formulaプロパティが指定されたとみなします。

'(例).Formulaを省略しても
  Range("A1") = "=SUM(B1:E1)"
  Cells(2, 1) = "=B2&C2"

'(例).Formulaを省略しなくても結果は同じ
  Range("A1").Formula = "=SUM(B1:E1)"
  Cells(2, 1).Formula = "=B2&C2"

注意点

  • Formulaの場合は省略せずきちんと付けた方が望ましいです。
    それは、データを取得する場合は必須だからです。

     Range("A1").Formula = "=SUM(B1:E1)"
     '省略すると=SUM(B1:E1)の結果を取得する
     Debug.Print Range("A1") '0
     '省略しないと数式をそのまま取得する
     Debug.Print Range("A1").Formula '=SUM(B1:E1)
    

    ※FormulaではなくVaueの場合をつけてもつけなくてもどちらでもいいです。

  • 最初は誰もがコピペで見様見真似でコード作成します。正常動作後、コードを見直すのは大事です。
  • RangeとCellの違いや、使い分けはは以下記事を参考にしてください。
    RangeとCellの使いわけ【VBA基本】

関連記事

セルに値を入力する【Valueプロパティ】【ExcelVBA】
セルのシリアル値を取得する【Value2プロパティ】【ExcelVBA】
セルの表示しているデータを取得する【Textプロパティ】【ExcelVBA】
セルの数式を取得する【Formula/FormulaR1C1プロパティ】【ExcelVBA】

 

コメント

タイトルとURLをコピーしました