VBAテクニック集 VBA一覧 その他の知識 プロパティ・メソッド解説

【VBA】ReferenceStyleの使い方|A1・R1C1参照形式を切り替える方法

Excelでは通常、「A1」「B2」「C10」のように列をアルファベット、行を数字で表すA1形式が使われています。一方、設定を変更すると「R1C1」「R2C2」のように行と列の両方を数字で表すR1C1形式を使用することもできます。

VBAからこの参照形式を確認・変更するときに使用できるのが、Application.ReferenceStyleプロパティです。

ReferenceStyleは名前に「Reference」が含まれているため、セルの参照先や数式の指定方法を変更する機能と混同されることがあります。しかし、このプロパティが扱うのは、Excelで使用する参照形式そのものの設定です。

また、設定対象がApplicationオブジェクトであることも重要です。マクロ内で安易に切り替えてそのまま処理を終了すると、利用者のExcel環境にR1C1形式が残ってしまうことがあります。

この記事では、Application.ReferenceStyleの役割と基本的な使い方から、A1形式・R1C1形式を切り替える方法、現在の設定を取得する方法まで順番に解説します。

✅ VBAのApplication.ReferenceStyleプロパティとは

ReferenceStyleはコード1行で設定できるため、一見すると単純なプロパティです。しかし、実務では「何を変更するプロパティなのか」を理解せずに使うことのほうが問題になりやすい機能です。特に誤解されやすいのが、セルに設定する数式の書き方を変更する機能ではないという点です。

また、Applicationオブジェクトのプロパティであるため、特定のセルだけを対象とした設定でもありません。マクロ実行後に列番号の表示が変わってしまい、利用者がExcelの不具合だと思ってしまうケースも考えられます。まずはReferenceStyleが担当する範囲を明確にしてから、コードでの操作方法を確認していきましょう。

・ReferenceStyleでExcelの参照形式を設定する

Application.ReferenceStyleは、Excelで使用されるセルの参照形式を取得または設定するプロパティです。

Excelには、主に次の2種類の参照形式があります。

参照形式セルの表示例特徴
A1形式A1、B5、D10列をアルファベット、行を数字で表す
R1C1形式R1C1、R5C2、R10C4行・列の両方を数字で表す

普段Excelで使われているのはA1形式です。

たとえば、

A1
C5
F10

という表記では、「A」「C」「F」が列、「1」「5」「10」が行を表しています。

これに対してR1C1形式では、「R」がRow(行)、「C」がColumn(列)を意味します。

たとえば、

R1C1
R5C3
R10C6

という表記になります。

R5C3なら5行目・3列目を意味するため、A1形式ではC5に該当します。

ReferenceStyleは、このExcelで使用する参照形式をVBAから制御するためのプロパティと考えると分かりやすいでしょう。

・ReferenceStyleは数式を設定するFormulaR1C1とは役割が異なる

ReferenceStyleを理解するときに特に注意したいのが、FormulaR1C1との違いです。

名前が似ていますが、目的は異なります。

Application.ReferenceStyleは、Excelで使用する参照形式をA1形式またはR1C1形式へ切り替えるためのプロパティです。

一方、FormulaR1C1は、セルへR1C1形式で数式を設定・取得するときに使用します。

つまり、

  • ReferenceStyle → Excelの参照形式を扱う
  • FormulaR1C1 → セルの数式をR1C1形式で扱う

という違いがあります。

特にVBAで数式を自動入力したい場合は、ReferenceStyleを変更することが目的なのではなく、FormulaR1C1を利用するケースがあります。

そのため、ReferenceStyleの記事では数式の絶対参照・相対参照の作り方まで深く扱わず、Excel側の参照形式をどのように管理するかに焦点を当てることが重要です。

A1形式やR1C1形式を理解するうえでは、Excelの「相対参照」と「絶対参照」の仕組みも重要です。セル参照の基本から整理したい場合は「【Excel基礎用語】相対参照・絶対参照とは|セル参照の仕組みを理解して関数のズレを防ぐ基礎知識」もあわせて確認しておくと、VBAで数式を扱う際の理解が深まります。


✅ VBAでReferenceStyleを設定する基本構文

ReferenceStyleの基本構文は非常に短いため、記述方法だけならすぐに覚えられます。しかし、「A1形式にしたいから"A1"を代入する」と考えてしまうと正しく設定できません。参照形式の指定には、Excel VBAで用意されている定数を使用します。

また、Applicationオブジェクトに対する設定であることから、変更後の状態を意識してコードを書く必要があります。テスト用の短いマクロなら問題にならなくても、複数の利用者が使う業務ツールでは設定を残すことがトラブルにつながります。まず基本構文を押さえたうえで、実際の切り替え方法へ進みましょう。

・ReferenceStyleプロパティの基本構文

ReferenceStyleを設定するときの基本構文は、次のとおりです。

Application.ReferenceStyle = 参照形式

主に使用する定数は、次の2つです。

定数設定内容
xlA1A1形式へ設定
xlR1C1R1C1形式へ設定

たとえば、A1形式へ設定する場合は次のように記述します。

Application.ReferenceStyle = xlA1

R1C1形式へ変更する場合は次のとおりです。

Application.ReferenceStyle = xlR1C1

"A1""R1C1"という文字列を指定するのではなく、xlA1またはxlR1C1という定数を使用するのがポイントです。

コードとしては簡単ですが、ReferenceStyleはExcelの参照形式に影響するため、「変更するコード」と「変更後をどうするか」をセットで考える必要があります。


✅ VBAでA1形式からR1C1形式へ切り替える方法

R1C1形式への変更は1行で実行できますが、コードを実行した後のExcel画面を確認しておくことが重要です。ReferenceStyleを変更すると、セルのデータが書き換えられるわけではありません。

しかし、列見出しなどの見え方が変化するため、仕組みを知らない利用者には大きな変更に見えることがあります。特に業務ファイルで突然列見出しが数字になれば、「マクロによってExcelが壊れたのではないか」と誤解される可能性があります。また、参照形式の変更が本当に必要なのかを判断することも大切です。まずは基本的な切り替えコードと、実行すると何が変わるのかを確認しておきましょう。

・R1C1形式へ変更するコード例

R1C1形式へ変更する場合は、次のように記述します。

Sub ChangeToR1C1Style()

    ' Excelの参照形式をR1C1形式へ変更する
    Application.ReferenceStyle = xlR1C1

End Sub

処理そのものは、Application.ReferenceStylexlR1C1を設定しているだけです。

実行前の列見出しが、

A  B  C  D

となっていた場合、R1C1形式へ変更すると、

1  2  3  4

のように数字で表示されます。

ここで重要なのは、セルそのものが移動したわけではないということです。

A1形式で「C5」と表されていたセルは、R1C1形式では「R5C3」と表現されます。参照形式が変わっただけで、ワークシート上の値やセル配置が変更されたわけではありません。

・A1形式へ戻すコード例

通常のA1形式へ変更する場合は、xlA1を指定します。

Sub ChangeToA1Style()

    ' Excelの参照形式をA1形式へ変更する
    Application.ReferenceStyle = xlA1

End Sub

このコードを実行すれば、列見出しは通常のA、B、Cという表示へ戻ります。

ただし、業務用マクロでは、

Application.ReferenceStyle = xlR1C1

' 必要な処理

Application.ReferenceStyle = xlA1

のように、最後に無条件でA1形式へ戻せばよいとは限りません。

なぜなら、マクロを実行する前からR1C1形式を使用していたユーザーも考えられるためです。

その状態で最後にxlA1を設定すると、マクロが利用者の元々のExcel設定を変更してしまいます。

実務では「一般的にはA1形式だからA1へ戻す」のではなく、実行前の設定を保存して、その値へ戻すほうが安全です。


✅ VBAで現在のReferenceStyleを取得・判定する方法

ReferenceStyleを業務で安全に扱うなら、設定方法だけでなく現在値の取得方法も重要になります。利用者が必ずA1形式を使用しているとは限らないため、最初から参照形式を決めつけるのは避けたいところです。

また、処理開始時の設定を保存しておけば、マクロの終了時に元の環境へ戻すことができます。この考え方はReferenceStyleに限らず、Applicationオブジェクトの設定を一時的に変更するマクロでは重要です。特に複数人へ配布する業務ツールでは、処理結果だけでなく「利用者のExcel環境を不要に変更しないこと」も品質の一部になります。

まずはReferenceStyleの現在値を判定する基本コードを確認しましょう。

・現在がA1形式かR1C1形式か判定する

現在の参照形式は、Application.ReferenceStyleを取得することで確認できます。

Sub CheckReferenceStyle()

    If Application.ReferenceStyle = xlA1 Then
        MsgBox "現在の参照形式はA1形式です。"
    ElseIf Application.ReferenceStyle = xlR1C1 Then
        MsgBox "現在の参照形式はR1C1形式です。"
    End If

End Sub

ReferenceStyleは設定するだけのプロパティではなく、現在値の取得にも利用できます。

実務では、さらに現在の設定を変数へ保存しておく方法が便利です。

Sub StoreReferenceStyle()

    Dim originalReferenceStyle As XlReferenceStyle

    ' マクロ実行前の参照形式を保存する
    originalReferenceStyle = Application.ReferenceStyle

    ' この後に必要な処理を記述する

End Sub

ここでは、変数名をoriginalReferenceStyleとしています。

単にstyleなどとするより、「変更する前のReferenceStyleを保持する変数」であることが読み取りやすく、後からコードを修正する担当者にも意図が伝わります。

ReferenceStyleのようなExcel全体へ影響する設定では、この元の状態を覚えておく設計が非常に重要です。

 

✅ VBAでReferenceStyleを変更後に元の設定へ戻す方法

ReferenceStyleを一時的に変更する場合、実務では「変更できること」よりも「処理後にどう戻すか」のほうが重要です。単純に最後へxlA1を指定すると、もともとR1C1形式を使っていた利用者の設定まで変更してしまいます。

また、マクロは自分だけが使用するとは限らず、別の担当者や部署へ展開されることもあります。そのため、利用者の環境を勝手に決めつけない設計が必要です。処理開始時のReferenceStyleを変数へ保存し、必要な処理が終わったら保存した値へ戻すようにすると安全性が高まります。こうした「変更前の状態へ戻す」という考え方は、Applicationオブジェクトの設定を扱うVBAで特に重要です。

・変更前の参照形式を保存して元に戻す

実務では、次のようにReferenceStyleを扱うと分かりやすくなります。

Sub TemporarilyChangeReferenceStyle()

    Dim originalReferenceStyle As XlReferenceStyle

    ' マクロ実行前の参照形式を保存する
    originalReferenceStyle = Application.ReferenceStyle

    ' 必要な間だけR1C1形式へ変更する
    Application.ReferenceStyle = xlR1C1

    ' ここにR1C1形式で行う処理を記述する

    ' マクロ実行前の参照形式へ戻す
    Application.ReferenceStyle = originalReferenceStyle

End Sub

このコードのポイントは、最後に無条件でxlA1を設定していないことです。

処理の流れは次のようになります。

  1. 現在のReferenceStyleを取得する
  2. originalReferenceStyleへ保存する
  3. 必要な参照形式へ一時的に変更する
  4. 必要な処理を実行する
  5. 保存しておいた参照形式へ戻す

たとえば実行前がA1形式ならA1形式へ戻り、R1C1形式ならR1C1形式へ戻ります。

コード量だけを考えると、

Application.ReferenceStyle = xlR1C1

' 処理

Application.ReferenceStyle = xlA1

としたほうが簡単です。

しかし、これは「利用者は必ずA1形式を使用している」という前提をコード側で決めていることになります。

複数人が利用するマクロや長期間運用する業務ツールでは、利用者の設定をできるだけ維持する設計のほうが、後から起こるトラブルを減らしやすくなります。


✅ VBAでエラーが発生してもReferenceStyleを元に戻す

変更前のReferenceStyleを変数へ保存するだけでは、まだ十分とはいえません。実務では、参照形式を変更した後の処理でエラーが発生する可能性があるためです。途中でマクロが停止すると、最後に記述したReferenceStyleを戻す処理まで到達しないことがあります。

その結果、R1C1形式のままExcelへ戻り、利用者から「列番号が数字になった」と問い合わせを受ける原因にもなります。正常終了するときだけではなく、異常終了したときにも設定を復元できるようにしておくことが重要です。ReferenceStyleを一時変更する業務コードでは、エラー処理まで含めて一つの設計として考えましょう。

・エラー時にも参照形式を復元する実務コード

たとえば、次のようにエラー処理と組み合わせられます。

Sub ProcessWithReferenceStyle()

    Dim originalReferenceStyle As XlReferenceStyle

    ' マクロ実行前の参照形式を保存する
    originalReferenceStyle = Application.ReferenceStyle

    On Error GoTo ErrorHandler

    ' 必要な間だけR1C1形式へ変更する
    Application.ReferenceStyle = xlR1C1

    ' ここに必要な処理を記述する

ExitHandler:

    ' 正常終了・エラー発生にかかわらず元の設定へ戻す
    Application.ReferenceStyle = originalReferenceStyle
    Exit Sub

ErrorHandler:

    MsgBox "処理中にエラーが発生しました。" & vbCrLf & _
           "エラー内容:" & Err.Description, vbExclamation

    Resume ExitHandler

End Sub

この書き方では、正常に処理が終了した場合も、エラーが発生した場合も最終的にExitHandlerを通るようにしています。

重要なのはエラーメッセージそのものではなく、途中で処理に失敗してもExcelの設定を可能な限り元へ戻す構造にしていることです。

業務用VBAでは、「目的の処理が正常に動くか」だけに目が向きがちです。しかし、途中で失敗したときにExcelがどのような状態で利用者へ返されるのかまで考えることで、保守性や安全性を高められます。


✅ ReferenceStyleを使う場面と使わなくてもよい場面

ReferenceStyleを覚えると、R1C1形式を扱う処理では毎回変更したほうがよいように感じるかもしれません。しかし、R1C1形式を利用することと、Excel全体のReferenceStyleをR1C1へ変更することは別の話です。

必要のない設定変更を増やせば、コードが複雑になり、元の状態へ戻す処理も必要になります。特に数式をR1C1形式で設定したいだけなら、ReferenceStyleを変更せずに対応できる場合があります。実務では「使えるプロパティだから使う」のではなく、「この処理に設定変更が本当に必要なのか」を判断することが大切です。

・Excelの参照形式そのものを制御したい場合に使う

ReferenceStyleが適しているのは、Excelの参照形式自体を確認・変更する必要がある場合です。

たとえば、

  • 現在の参照形式を判定したい
  • A1形式またはR1C1形式へ明示的に切り替えたい
  • 参照形式に応じて処理を分岐させたい
  • 一時的に参照形式を統一してから処理したい

といったケースが考えられます。

一方、単純にセルへR1C1形式の数式を設定したいだけなら、ReferenceStyleの変更が必須とは限りません。

Applicationオブジェクトの設定変更には影響範囲があるため、変更しなくても目的を達成できるのであれば、不要な設定変更を行わないという判断も重要です。

VBAでセル位置を柔軟に扱いたい場合、参照形式そのものを変更する以外にも、OffsetやResizeを使って基準セルから相対的に範囲を指定する方法があります。可変データに対応した範囲指定については「【VBA】OffsetとResizeで範囲を動的に指定する方法【考え方重視】」で詳しく解説しています。


✅ ReferenceStyleとFormulaR1C1の違いを理解して使い分ける

ReferenceStyleとFormulaR1C1は、どちらにも「R1C1」が関係するため混同されやすい機能です。しかし、この2つを同じ目的で使用すると、必要のない設定変更を行ったり、想定とは違う処理を書いたりする原因になります。ReferenceStyleはExcelの参照形式に関係する設定であり、FormulaR1C1はセルの数式を扱うためのプロパティです。

この役割の違いを理解しておけば、「数式を設定したいからReferenceStyleを変更する」といった遠回りを避けられます。実務ではプロパティ名だけで判断せず、何を操作する機能なのかを基準に使い分けることが重要です。

・ReferenceStyleとFormulaR1C1の役割を比較する

両者の違いを整理すると、次のようになります。

項目ReferenceStyleFormulaR1C1
主な目的Excelの参照形式を設定・取得セルの数式をR1C1形式で設定・取得
主な対象ApplicationRange
A1・R1C1の切り替えできる目的ではない
数式の設定目的ではないできる
Excel画面の参照形式影響する基本的に切り替えない

つまり、「Excelで使用する参照形式そのものを変更したい」のであればReferenceStyleを検討します。

一方、「VBAからR1C1形式を利用して数式を設定したい」のであればFormulaR1C1が中心になります。

特に絶対参照・相対参照を利用して数式を効率よく設定する方法はFormulaR1C1側のテーマであり、ReferenceStyleとは切り分けて理解すると整理しやすくなります。

R1C1形式を使ってセルへ数式を設定する場合は、ReferenceStyleではなくFormulaR1C1の理解が重要になります。絶対参照・相対参照の指定方法や、数式を効率よく設定する方法については「【VBA】FormulaR1C1の使い方|R1C1形式の絶対参照・相対参照と数式設定を解説」で詳しく解説しています。


 

✅ VBAでApplication.ReferenceStyleを使う際の注意点

ReferenceStyleはシンプルなプロパティですが、Applicationオブジェクトの設定を変更する以上、影響範囲を意識して使用する必要があります。特に「自分のPCでは問題なく動いた」という確認だけで業務ツールへ組み込むと、別の利用者の環境で思わぬ問題になることがあります。

また、処理の都合だけでR1C1形式へ変更し、元へ戻す処理を忘れるのは避けたいところです。さらに、数式をR1C1形式で設定することが目的なら、ReferenceStyle自体を変更する必要がないケースもあります。プロパティの使い方だけでなく、「変更しない」という選択肢まで含めて判断しましょう。

・利用者の設定を勝手にA1形式へ固定しない

特に避けたいのは、マクロの最後で常に次のコードを実行する設計です。

Application.ReferenceStyle = xlA1

一般的にはA1形式が使われることが多くても、利用者が意図的にR1C1形式を使用している可能性があります。

安全性を重視するのであれば、

  1. 実行前のReferenceStyleを取得する
  2. 必要な場合だけ変更する
  3. 処理を実行する
  4. 正常終了・異常終了を問わず元の設定へ戻す

という流れを基本にするとよいでしょう。

また、ReferenceStyleを変更する理由がコード上から分からないと、後から改修する担当者が「不要な処理」と判断して削除してしまうこともあります。

そのため、

' 後続処理のため、一時的に参照形式をR1C1へ変更する
Application.ReferenceStyle = xlR1C1

のように、何をしているかだけでなく、なぜ変更しているのかが伝わるコメントを残すことも保守性の向上につながります。


✅ まとめ:ReferenceStyleでA1・R1C1参照形式を安全に管理しよう

Application.ReferenceStyleはコード自体が短いため、A1形式とR1C1形式を切り替えるだけなら難しいプロパティではありません。しかし、実務で重要なのは構文を覚えることではなく、Applicationオブジェクトの設定を変更していることを理解し、利用者の環境へ不要な影響を残さないことです。

  • Application.ReferenceStyleではExcelの参照形式を取得・設定できる
  • xlA1を指定するとA1形式へ変更できる
  • xlR1C1を指定するとR1C1形式へ変更できる
  • 参照形式を変更する前に元のReferenceStyleを保存しておくと安全
  • マクロ終了時はA1形式へ固定せず、変更前の設定へ戻す
  • エラー発生時にも元の設定を復元できる構造を意識する
  • ReferenceStyleとFormulaR1C1は目的が異なる
  • R1C1形式で数式を設定するだけならReferenceStyleの変更が不要な場合もある

ReferenceStyleを扱うときは、「変更できるか」ではなく「変更する必要があるか」「処理後に元の環境を維持できるか」まで考えることがポイントです。

こうした考え方を身につけておけば、自分だけが使う短いマクロだけでなく、複数人で利用・保守するVBAツールでも安全な設計につなげられます。

    -VBAテクニック集, VBA一覧, その他の知識, プロパティ・メソッド解説