セルに数式を入力したり、入力されている数式を取得するプロパティです。
対象がセル範囲の時には取得される結果は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プロパティと同じ結果を返
します。
|