ConvertFormula
セルの相対参照を絶対参照にするには、アプリケーション関数の ConvertFormula を使うと便利です。
ConvertFormula は相対/絶対参照の変換の他、R1C1参照形式への変更にも対応しています。
構文
Application.ConvertFormula(Formula, _
FromReferenceStyle, _
ToReferenceStyle, _
ToAbsolute, _
RelativeTo)
引数の詳細は、以下のようになっています。
引 数 | 説 明 | 省略 |
---|---|---|
Formula | 変換させたい数式 | 必須 |
FromReferenceStyle | 変換後の参照形式を指定 | 必須 |
ToReferenceStyle | 変換後の参照形式を指定 | (必須) |
ToAbsolute | 変換後に相対/絶対参照するかを指定 | 省略可 |
RelativeTo | 相対参照の起点を指定 | 省略可 |
戻り値
戻り値はバリアント型で、成功すると変換された数式が返されます。
引数の形式
各引数に割り当てる形式は以下のようになっています。
FromReferenceStyle および ToReferenceStyle
A1参照形式か、R1C1参照形式を指定します。
xlA1 | A1参照形式 |
xlR1C1 | R1C1参照形式 |
ToAbsolute
相対参照するか、絶対参照するかを指定
xlAbsolute | 行、列とも絶対参照 | $A$1 |
xlAbsRowRelColmun | 行のみ絶対参照 | A$1 |
xlRelRowAbsColmun | 列のみ絶対参照 | $A1 |
xlRelative | 行列とも相対参照 | A1 |
サンプルコード
以下のようにC3セルが、B2セルを数式にて参照している状態で ConvertFormula を使ってみます。

'A1参照形式を絶対参照形式に変換
Sub testConvertFormula1()
Debug.Print Application.ConvertFormula(Range("C3").Formula, xlA1, xlA1, xlAbsolute)
End Sub
【結果】
=$B$2
'A1参照形式を相対参照形式に変換
Sub testConvertFormula2()
Debug.Print Application.ConvertFormula(Range("C3").Formula, xlA1, xlA1, xlRelative)
End Sub
【結果】
=B2
'A1参照形式をR1C1参照形式の絶対参照に変換
Sub testConvertFormula3()
Debug.Print Application.ConvertFormula(Range("C3").Formula, xlA1, xlR1C1, xlAbsolute)
End Sub
【結果】
=R2C2
'A1参照形式をR1C1参照形式の相対参照に変換
Sub testConvertFormula4()
Debug.Print Application.ConvertFormula(Range("C3").Formula, xlA1, xlR1C1, xlRelative)
End Sub
【結果】
=R[-1]C[-1]
※このコードでは、選択されているセルによって結果が変わるので注意してください。
選択範囲をA1形式の絶対参照に変更する
以下のプログラムでは、選択範囲(Selection)をA1形式の絶対参照に変換します。
Sub myConvertFormulaAbsolute()
Dim rng As Range
Dim r
Set rng = Selection
For Each r In rng
r.Formula = Application.ConvertFormula(r.Formula, xlA1, xlA1, xlAbsolute)
Next r
End Sub
rng の範囲を指定すれば、Selection以外の範囲にも対応できます。
絶対参照でなく相対参照にしたい場合は、xlAbsolute を xlRelative に変更します。
数式のないセルは、そのままの値が返されるようです。
コメント