相対参照から絶対参照に変換する

シート

ConvertFormula

 セルの相対参照を絶対参照にするには、アプリケーション関数の ConvertFormula を使うと便利です。
 ConvertFormula は相対/絶対参照の変換の他、R1C1参照形式への変更にも対応しています。

構文

  Application.ConvertFormula(Formula, _
                FromReferenceStyle, _
                ToReferenceStyle, _
                ToAbsolute, _
                RelativeTo)

引数の詳細は、以下のようになっています。

引  数説  明省略
Formula変換させたい数式必須
FromReferenceStyle変換後の参照形式を指定必須
ToReferenceStyle変換後の参照形式を指定(必須)
ToAbsolute変換後に相対/絶対参照するかを指定省略可
RelativeTo相対参照の起点を指定省略可

戻り値

 戻り値はバリアント型で、成功すると変換された数式が返されます。

引数の形式

 各引数に割り当てる形式は以下のようになっています。

FromReferenceStyle および ToReferenceStyle

 A1参照形式か、R1C1参照形式を指定します。

xlA1A1参照形式
xlR1C1R1C1参照形式

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 に変更します。

 数式のないセルは、そのままの値が返されるようです。

コメント

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