実務で扱う集計データが入力されたExcelシートは、たいてい横に長く、多くの見出し項目を持っているものが少なからずありますよね。そのようなExcelシートに対して、VBAコードを組む際はいつもExcelシートの表示形式を「R1C1形式」にしています。
理由は、列表示が英語表記のままだと即座に列数を把握できず、開発効率が落ちるからです。例えば、Aなら1列目、Bなら2列目、Cなら3列目と、最初の10文字目までは慣れで即座に出てくるのですが、Tは何列目?Sは何列目?じゃあASは?というふうに、即座に列数が出てきません。
とくにExcelシートのデータ範囲を配列に格納して扱うときは、R1C1形式にしないと開発効率が著しく落ちます。
経験上、集計業務用のVBAコードは、Cellsオブジェクトを使うことにより、書込み行や読込行の指定をすることが多いです。よって、コーディングする際は即座に目的のセルが「何行目の何列目」というふうに分からないと、コーディングに時間が掛かってしまうのです。
本記事では、コーディングの際にぜひ使いたい「R1C1」形式表示の切り替え方法をご紹介します。
目次
R1C1形式表示への切り替え方
まず下図のようにExcelシートのメニュー画面をクリックしてください。
するとバックステージビューが開きますので、左下にある「オプション」メニューをクリックします。
下図のような「Excelのオプション」ウィンドウが表示されますので、「数式」(①)→「R1C1参照形式を使用する」にチェックを入れてください。
チェックを入れましたら最後に「OK」ボタンを押してくださいね。
Excelシート画面に戻りますので、列表示を確認して下図のように数字になっていればOKです。
R1C1形式とA1形式を瞬時に切り替えるショートカットの作り方
VBAで開発をする際に、どうしてもR1C1形式とA1形式を頻繁に切り替えることがあります。
例えば他の人が作ったコードのセル指定が、「Range("DJ" & i )」のようなコード表記を多用している場合、DJ列が何列目のセルかを確認するために、A1表示形式とR1C1表示形式を何度も切り替えて確認しなくてはなりません。
そのような時、前項の方法で表示形式を切り替えることが面倒に感じられるようになります。そこで本項では、A1表示形式とR1C1表示形式をショートカットで切り替える便利な方法があります。
その方法とは、A1表示形式とR1C1表示形式を切り替えるVBAコードをショートカットから実行させる方法です。
A1表示形式とR1C1表示形式を瞬時に切り替えるVBAコード
それではA1表示形式とR1C1表示形式を瞬時に切り替えるためのVBAコードをご紹介します。と言っても大変簡単なコードですので、まずは下記のVBAコードを、ショートカットを設定したい任意のExcelファイルの標準モジュールに書き写してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 | Option Explicit Sub SwitchColumDisplay() If Application.ReferenceStyle = xlA1 Then 'A1表示形式の場合 Application.ReferenceStyle = xlR1C1 'R1C1表示形式に切り替える ElseIf Application.ReferenceStyle = xlR1C1 Then 'R1C1表示形式の場合 Application.ReferenceStyle = xlA1 'A1表示形式に切り替える End If End Sub |
ショートカットキーを設定する方法
続いて上記VBAコードをショートカットキーにより実行させるための方法を2つ紹介します。
マクロメニューのショートカットに設定する
1つ目はマクロメニューからショートカットキーを割り当てる方法です。下の図のように「開発」- 「マクロ」メニューをクリックしてください。

続いて①でショートカットを設定したいプロシージャを選択後、②のオプションボタンをクリックすると、右のマクロオプションウィンドウが出ます。
③の「Ctrl +」の後のテキストボックスにショートカットキーとなる英字を入力して、OKをクリック(④)すれば設定完了です。(④の後にマクロウィンドウが表示されたままになりますが、右下の「キャンセル」ボタンをクリックして閉じてください)

マクロメニューからのショートカットキー設定方法
図の例では、③で英字「z」を割り当てましたので、この設定以降は「Ctrl + z」により一瞬でA1表示形式とR1C1表示形式を切り替えることができます。
VBAコードを実行してショートカットに設定する
もう1つの方法は、下に示したVBAコードを実行してショートカットキーを割り当てる方法です。
1 2 3 4 | Sub SetShortCutKey() '「Ctrl + z」をプロシージャ「SwitchColumDisplay」実行のショートカットキーに割り当てる Application.OnKey "^z", "SwitchColumDisplay" End Sub |
Application.OnKey(ApplicationクラスのOnkeyメソッド)の使い方は、第1引数に割り当てたいショートカットキー、第2引数に実行させたいプロシージャーを指定します。 ここで注意したいのが、いづれの引数とも文字列で指定することです。
今回の例で第1引数に"^z"と書くことで「Ctrl + z」がショートカットキーに割り当てられます。すなわち「^」は「Ctrl」の意味になりますので、例えば「Ctrl + k」とか「Ctrl + p」などをショートカットキーに割り当てたい場合の第1引数の文字列は、それぞれ"^k"、"^p"のように指定します。
R1C1形式による行列やセルの参照方式
R1C1形式で表示した場合、行や列、およびセル番地もR1C1で表示されます。ここではR1C1形式の切り替え方法の補足事項として、R1C1形式上での行や列、およびセル番地の表示について、相対参照と絶対参照の2つの指定方法に分けて解説します。
R1C1形式における行番地の指定方法
下図は、R1C1形式における行の相対参照と絶対参照による指定方法の違いを示しています。この例ではCells(5,5)に、Excelシートの行1~行3全体を合計するSUM関数が入力されています。

相対参照の場合、まず基準になるセルの行をRとします。そして、その基準行Rより1つ上の行をR[-1]で指定します。さらにもう1つ上の行は、R[-2]というように、基準行Rからの相対位置で指定することができます。
よって、図には表示されていませんが、この例の場合、Excelシート6行目はR[1]、7行目はR[2]のように指定できます。また、SUM(R[-4]:R[-2])の合計する範囲は、図中青で示された範囲になります。
一方、絶対参照で指定する方法は、Rの次にExcelシートの行番号そのものを記述して指定します。図の例では、数式が入力されているセルの行番号はR5と指定できます。
したがって、SUM関数の合計範囲を絶対参照で指定するとSUM(R1:R3)のような記述になります。
R1C1形式における列番地の指定方法
今度は列番地の指定方法についてですが、行番号の指定方法と考え方は同じです。ただ使う文字がRではなくCになっただけの違いですので、下図を参照にして行番地指定の方法と見比べてみてください。

R1C1形式におけるセル番地の指定方法
最後に、セル番地の相対参照と絶対参照の例をご紹介します。セル番地の指定方法は、行や列の番地指定の考え方が基本になります。
下図は、Cells(5, 7)に入力された数式を、R1C1形式上で相対参照によるセル番地指定をした例です。セル番地をR1C1形式で指定するには、RとCをそれぞれ指定します。

この例では、数式の入力されているセルが基準になりますので、セル番地はRCで指定できます。また式の対象となる2つのセル(赤枠セルと青枠セル)は、それぞれ基準のセル番地(黄色塗りつぶし)から、列方向に-4, -2とオフセットしています。
よって、それぞれのセル番地を指定する記述は、RC[-4](赤枠セル)とRC[-2](青枠セル)になります。
最後は、セル番地の絶対参照による指定方法です。これも行や列の指定方法の考え方が基本になります。
下図の例は、Cells(5, 7)に入力された足し算の式を、セル番地の絶対参照で指定した例です。

この場合、基準となるセル番地は、絶対参照ではR5C7のようにExcelシートの行列番号そのものを使い指定できます。また加算対象となる2つのセルについても、そのままセルの行列番号をRやCの後ろに記述して指定できます。
まとめ
本記事では、列見出し項目が多い時のコーディングに便利な、Excelシートの表示モードを切り替える方法についてお話ししました。実際にコーディングする際に「A1」形式に比べて「R1C1」形式の方がコーディングが捗ることを実感できると思います。