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

【VBA】R1C1形式に変換する方法

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$1R1C1
相対参照A1R[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形式のメリットとデメリット

メリット

  1. 動的な数式設定が簡単
    行や列が動的に変わる場合でも、シンプルに数式を設定できます。
  2. 範囲外参照のエラー回避
    相対的な行列指定を使用するため、絶対参照が不要になる場合があります。
  3. R1C1 形式は列の明示的に表す
    表記(A、B、C)を避け、数値で一貫性を考慮します。

デメリット

  1. 初心者にはやや難解。
    A1形式に慣れている場合、最初は直感的にわかりにくい。
  2. 手動でのデバッグが難しい。
    数式の範囲を視覚的に確認しにくい。

まとめ

R1C1形式は、動的なセル参照や数式の設定が求められる場合に便利な方法です。以下のポイントを押さえて、実務での活用がスムーズになります。

  1. FormulaR1C1プロパティを使用してセルに数式を設定します。
  2. 相対参照または絶対参照を利用して柔軟な操作が可能です。
  3. Application.ConvertFormulaを活用して R1C1 形式と A1 形式を相互に変換します。

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