VBAで自動化 VBA一覧 セル・値の取得と貼り付け 値渡し・参照

【VBA】R1C1形式を使用した絶対参照の方法

Excel VBA では、数式をセルに設定する際に FormulaR1C1 プロパティを使用して R1C1形式 の数式を指定できます。特に、R1C1形式は絶対参照や相対参照の指定が容易で、動的に数式を操作する際に便利です。

この記事では、R1C1形式の絶対参照 の基本的な使い方から、活用例までを解説します。

R1C1形式とは?

R1C1形式では、行(Row)を R、列(Column)を C と表記し、行番号と列番号でセルを指定します。

絶対参照と相対参照の違い
形式説明
絶対参照R1C1セル A1(行1、列1)を絶対参照
相対参照R[1]C[1]現在のセルから1行下、1列右

R1C1形式を使用する基本構文

Excel VBA では、セルに数式を設定する際に FormulaR1C1 プロパティを使用します。

コード例: 絶対参照の基本構文

セル A1 に絶対参照でセル B2 の値を取得する数式を設定します。

Sub SetAbsoluteReference()

Range("A1").FormulaR1C1 = "=R2C2"

End Sub

解説

  • R2C2 はセル B2 を絶対参照で指定しています。
  • 行番号や列番号を固定する場合は、数値だけを指定します。

セルの値を絶対参照で加算

セル A1 に絶対参照でセル B2 の値を2倍にする数式を設定します。

Sub AddAbsoluteReferenceFormula()

Range("A1").FormulaR1C1 = "=R2C2 * 2"

End Sub

絶対参照を使用した列の合計

セル A1 に絶対参照で列 B の合計を設定します。

Sub SumColumnWithAbsoluteReference()

Range("A1").FormulaR1C1 = "=SUM(R1C2:R10C2)"

End Sub

解説

  • R1C2:R10C2 は列 B の1行目から10行目を絶対参照で指定しています。

動的な範囲を指定する方法

R1C1形式では、数式の範囲を動的に設定することも可能です。

動的なセル範囲で絶対参照

データ範囲を動的に取得して列 B の合計をセル A1 に設定します。

Sub DynamicAbsoluteReference()

Dim lastRow As Long
lastRow = Cells(Rows.Count, 2).End(xlUp).Row ' 列 B の最終行を取得

Range("A1").FormulaR1C1 = "=SUM(R1C2:R" & lastRow & "C2)"

End Sub

解説

  • Cells(Rows.Count, 2).End(xlUp).Row で列 B の最終行を取得しています。【VBA】最終行:取得
  • R1C1形式を使用することで、動的な範囲を簡潔に指定できます。

絶対参照と相対参照の組み合わせ

セル A1 に絶対参照でセル B1、相対参照で現在のセルの1行下を使用した数式を設定します。

Sub MixedReferenceFormula()

Range("A1").FormulaR1C1 = "=R1C2 + R[1]C"

End Sub

解説

  • R1C2 はセル B1 を絶対参照で指定。
  • R[1]C は現在のセルから1行下、同じ列を相対参照で指定。

シート全体に絶対参照の数式を設定

列 A 全体に絶対参照で列 B の対応する値を2倍にする数式を設定します。

Sub SetAbsoluteReferenceForEntireColumn()

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")

ws.Range("A1:A10").FormulaR1C1 = "=R[0]C[1] * 2"

End Sub

解説

  • R[0]C[1] は現在のセルから見た相対参照で1列右を指定しています。
  • R1C1形式では、絶対参照と相対参照を混在させることで柔軟な範囲指定が可能です。

現在の参照形式を確認・変更する

Excel の参照形式が A1形式R1C1形式 に依存するため、VBA で参照形式を切り替えることもできます。

参照形式を R1C1 に切り替える

Sub SwitchToR1C1ReferenceStyle()

Application.ReferenceStyle = xlR1C1
MsgBox "参照形式を R1C1 に切り替えました。"

End Sub

参照形式を確認する

Sub CheckReferenceStyle()

If Application.ReferenceStyle = xlR1C1 Then

MsgBox "現在の参照形式は R1C1 形式です。"

Else

MsgBox "現在の参照形式は A1 形式です。"

End If

End Sub

R1C1形式を使用する際の注意点

  1. 参照形式に依存する数式設定
    FormulaR1C1 を使用する際、Excel が R1C1形式になっていない場合でも機能しますが、数式の見え方が異なる場合があります。
  2. 可読性の考慮
    R1C1形式は動的な数式や複雑な計算に便利ですが、慣れていないと可読性が低下する可能性があります。
  3. 数式エラーの検出
    動的な範囲を指定する場合、数式エラーが発生しないように範囲を適切に設定しましょう。

まとめ

R1C1形式を使用すると、数式の動的な設定や絶対参照の指定が簡単に行えます。以下のポイントを押さえておきましょう:

  1. 絶対参照の基本: R1C1 の形式でセルを固定的に指定。
  2. 動的な範囲の設定: 最終行などを動的に計算して数式を設定可能。
  3. 相対参照との組み合わせ: 絶対参照と相対参照を混在させることで柔軟な数式が構築可能。
  4. 参照形式の管理: Application.ReferenceStyle を使用して参照形式を確認・変更可能。

-VBAで自動化, VBA一覧, セル・値の取得と貼り付け, 値渡し・参照