Excelでセルを参照する際、通常は「A1形式」が一般的ですが、もう一つの方法として「R1C1形式」があります。R1C1形式とは、行と列を数値で動的に指定できる方法です。セル参照や数式の設定にとても便利です。
Excel VBA で R1C1 形式を使用する方法、A1 形式との違い、そして実際のコード例について解説します。
目次
R1C1形式とは?
R1C1形式では、行をR(Row)、列をC(Column)で表現します。
- R1C1 : 行1、列1(セルA1に相当)
- R3C5 : 行3、列5(セルE3に相当)
さらに、相対参照を指定することも可能です。
- R[1]C[1] : 現在のセルから、1 行下、1 列右。
- R[-1]C[-2] : 現在のセルから、1 行上、2 列左。
A1形式との違い
項目 | A1形式 | R1C1形式 |
---|---|---|
基本構文 | 列名+行番号 | R(行番号)C(列番号) |
絶対参照 | $A$1 | R1C1 |
相対参照 | A1 | R[0]C[0] |
動的数式設定 | やや複雑 | シンプルでわかりやすい |
R1C1形式を使うことで、動的に数式を設定する際のコードが決まります。
Excel VBAでR1C1形式を使う方法
Excel VBA では、FormulaR1C1プロパティ
を使用してセルに R1C1 形式の数式を設定できます。また、Application.ReferenceStyleプロパティ
を使用するとR1C1 形式と A1 形式を認識できます。
【VBA】Application.ReferenceStyle プロパティの使い方と活用方法
基本的なR1C1形式の数式設定
セル C1 に R1C1 形式で数式を設定する例です。
Sub SetFormulaR1C1()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
' セル C1 に A1 と B1 の合計を設定
ws.Range("C1").FormulaR1C1 = "=R1C1+R1C2"
End Sub
解説
R1C1
はセルA1を表します。R1C2
はセルB1を表します。- 設定後、セル C1 には「=A1+B1」という数式が表示されます。
相対参照を使用する例
相対を参照して使用して、動的にセルの数式を設定する例です。
Sub SetRelativeFormulaR1C1()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
' セル A2 に現在のセルの1つ上(A1)の値をコピー
ws.Range("A2").FormulaR1C1 = "=R[-1]C"
End Sub
解説
R[-1]C
は最新セルの1行上、同じ列を参照します。- 設定後、セル A2 には「=A1」という数式が表示されます。
R1C1形式からA1形式に変換
R1C1形式をA1形式に変換したい場合は、以下のコードを使用します。
Sub ConvertR1C1ToA1()
Dim r1c1Formula As String
Dim a1Formula As String
' R1C1形式の数式
r1c1Formula = "=R[-1]C+R[-2]C"
' A1形式に変換
a1Formula = Application.ConvertFormula(r1c1Formula, xlR1C1, xlA1, xlRelative, Range("A3"))
MsgBox "A1形式: " & a1Formula
End Sub
解説
Application.ConvertFormula
を使用して、R1C1 形式から A1 形式に変換します。- 引数の
Range("A3")
は変換元セルの基準を指定します。
R1C1形式で複数のセルに数式を設定
列Cのすべてのセルに動く数式を設定する例です。
Sub SetFormulaR1C1ForRange()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 列Cに数式を設定 (A列とB列の合計)
ws.Range("C1:C" & lastRow).FormulaR1C1 = "=R[0]C[-2]+R[0]C[-1]"
End Sub
解説
R[0]C[-2]
は、現在の行程の2列左を表します(A列)。R[0]C[-1]
は、現在の行程の1列左を表します(B列)。- 列Cのすべてのセルに「A列+B列」の合計を設定します。
R1C1形式をA1形式にしよう
Excel全体の参照形式を変更する場合、Application.ReferenceStyle
を使用します。
【R1C1形式の切り替え】
Sub SwitchToR1C1()
Application.ReferenceStyle = xlR1C1
End Sub
【A1形式に切り替える】
Sub SwitchToA1()
Application.ReferenceStyle = xlA1
End Sub
R1C1形式のメリットとデメリット
メリット
- 動的な数式設定が簡単
行や列が動的に変わる場合でも、シンプルに数式を設定できます。 - 範囲外参照のエラー回避
相対的な行列指定を使用するため、絶対参照が不要になる場合があります。 - R1C1 形式は列の明示的に表す
表記(A、B、C)を避け、数値で一貫性を考慮します。
デメリット
- 初心者にはやや難解。
A1形式に慣れている場合、最初は直感的にわかりにくい。 - 手動でのデバッグが難しい。
数式の範囲を視覚的に確認しにくい。
まとめ
R1C1形式は、動的なセル参照や数式の設定が求められる場合に便利な方法です。以下のポイントを押さえて、実務での活用がスムーズになります。
FormulaR1C1
プロパティを使用してセルに数式を設定します。- 相対参照または絶対参照を利用して柔軟な操作が可能です。
Application.ConvertFormula
を活用して R1C1 形式と A1 形式を相互に変換します。