セルに数式を入力/取得する(Formula/FormulaR1C1プロパティ)

 セルに数式を入力したり、入力されている数式を取得するプロパティです。
対象がセル範囲の時には取得される結果は2次元の配列になります。


 構文  Object.Formula       A1形式で数式の設定/取得
        Object.FormulaR1C1   R1C1形式で数式の設定/取得


 設定項目        内容
  Object          Rangeオブジェクト


●サンプル1●
Sub FormulaSamp1()

    '----(1)
    Range("C1").Formula = "=A1+B1"
    '----(2)
'   Range("C1").Formula = "=$A$1+$B$1"
    '----(3)
'   Range("C1").FormulaR1C1 = "=R1C1+R1C2"
    '----(4)
'   Range("C1").FormulaR1C1 = "=RC[-2]+RC[-1]"
    MsgBox "A1形式では:" & Range("C1").Formula & Chr(13) & _
           "R1C1形式では:" & Range("C1").FormulaR1C1

End Sub


 (1)〜(4)はどれもセルC1にセルA1とB1を足す数式を入力します。(1)がA1形式
で相対参照、(2)がA1形式で絶対参照、(3)がR1C1形式で相対参照、(4)がR1C1形式
で絶対参照の数式を入力します。セルに入力された数式は、(1)と(3)、(2)と(4)
で同じものになります。(5)のステートメントで入力された数式を両方の形式で
取得しています。

 サンプルの1ような数式では、可読性を考えるとFormulaR1C1プロパティを使用
する意味はあまりありません。逆に数式中で参照するセル範囲が、プログラム中
で行番号と列番号で特定できるような場合には、列番号に数値を使用できる
FormulaR1C1プロパティを使用した方が便利です。
 では、データの右端に左端までの値を合計する数式を入力するには、それぞれ
どのような記述になるでしょうか。なお、データ範囲は可変なものとします。

 一例に過ぎませんが、Formuraプロパティを使用した場合はこうなります。


●サンプル2●

Sub FormulaSamp2()

    Dim myLastRow As Long
    Dim myLastCol As Integer
    Dim i As Long

    '----最終行
    myLastRow = Range("A1").End(xlDown).Row
    '----最終列
    myLastCol = Range("A1").End(xlToRight).Column
    For i = 1 To myLastRow
        '----(1)参照範囲の記述
        Cells(i, myLastCol + 1).Formula = "=SUM(A" & i & ":" & _
           Cells(i, myLastCol).Address(False, False) & ")"
    Next i

End Sub


 せっかく取得した最終行と最終列が、(1)の参照範囲の記述時に生かせていません。
では、FormulaR1C1プロパティを使用するとどうなるでしょうか。


●サンプル3●

Sub FormulaSamp3()

    Dim myLastRow As Long
    Dim myLastCol As Integer
    Dim i As Long

    '----最終行
    myLastRow = Range("A1").End(xlDown).Row
    '----最終列
    myLastCol = Range("A1").End(xlToRight).Column
    For i = 1 To myLastRow
        Cells(i, myLastCol + 1).FormulaR1C1 = _
           "=SUM(RC[" & -myLastCol & "]:RC[-1])"
    Next 

End Sub


 サンプル2とサンプル3のどちらが理解しやすいコードか比較してみてください。


●注意●
セルに入力されているのが数式以外の場合には、Valueプロパティと同じ結果を返
します。

Excel2000



戻る


Excel Word Access VBA! モーグ