セルのマクロが作りやすくなるExcelの「R1C1参照形式」:VBA/マクロ便利Tips
業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、セルの番地を指定する際の通常の「A1形式」とは異なる「R1C1参照形式」について、その概要と設定の仕方、利点・欠点、それを利用したマクロ例を紹介。
セルの番地を指定する場合は、通常は「A1形式」がデフォルト値となっている。例えば、A1、A2……、B1、B2……と指定するのが「A1形式」だ。実は、このセル番地の指定方式にはもう1つ、「R1C1参照形式」というものも存在するのだが、ご存じだろうか。
今回は、この「R1C1参照形式」の利点について考えてみよう。
「R1C1参照形式」を使用するには
この形式を使用する場合はExcelメニューの[ファイル]→[オプション]と選択し[数式]を選択して、[R1C1参照形式を使用する]にチェックを付ける(図1)。
A1形式を使用している場合は、例えばA1を選択している場合、「列」が図2のように「A」と表示される。
「R1C1参照形式」では、「列」は「C1」のように表示される(図3)。
「R1C1参照形式」では、もうお分かりだと思うが、RはRowの「行」を表し、CはColumnの「列」を表している。よって図3では1行目の列1列目を選択している意味になる。それに、図2と図3を見比べると図2の列はアルファベット表記だが、図3は数値で表示されている。
「R1C1参照形式」の利点
例えば図4のようなデータがあるとしよう。
「A1形式」で全ての「Excel VBA」の文字色を「赤」に変化させるにはリスト1のようにマクロを記述する。VBEを起動して[挿入]→[標準モジュール]と選択して、Module内に記述する。
Option Explicit Sub 全ての文字色を赤に変える() Dim i As Long Dim j As Long For i = 1 To 26 For j = 1 To 27 Cells(i, j).Font.ColorIndex = 3 Next Next End Sub
Long型の変数「i」と「j」を宣言し、変数「i」で「行番号」、変数「j」で「列番号」を指定して反復処理を行い、「Cells(行番号,列番号)」の書式を使って文字の色を「3」(赤)に変更している。
ColorIndexの色番号については、記事「セルの数値、フォント、文字位置、背景色、けい線など表示形式/書式設定の使い方」を参照してほしい。
これでVBEのメニューから[実行]→[Sub/ユーザーフォームの実行]とすると、全ての文字色が赤に変化する。
特にプログラム上は何の問題もないのだが、「A1形式」でコードを書くと、「行番号」は数値で表示されているので見れば分かるが、「列番号」はA〜DARといったようなアルファベットで表示されるため、リスト1の「列番号」を指定する際に、今回はA〜AAまでの範囲としているので、アルファベット26文字に1を足して「27」と計算して指定している。「A1形式」では「列番号」を指で数えねばならないのだ。
ところが、これがA〜DARといったような場合には、列の番号を数えるのはもはや不可能に近い。そこで便利なのが「R1C1参照形式」になってくるのだ。
図4を「R1C1参照形式」で表示させると、図5のように表示される。
図4と図5を見比べると分かるが、先にも書いたように、列番号が数値で表示されている。これなら例えば「AA」の列が何列目に当たるかをいちいち数える必要がない。
このように「R1C1参照形式」では、「行」も「列番号」も全て数値で表示されるために、VBAを書く上では非常に便利ではあるが、デフォルトが「A1形式」になっているし、ほとんどのExcel VBAの解説では「A1形式」が用いられているため、本Tips連載でも「A1形式」で解説している。
リスト1を実行すると、図6のように表示される。
図6は、「R1C1参照形式」で文字色を変えているがコードはリスト1のままだ。
「R1C1参照形式」にした場合の問題点
「R1C1参照形式」にした場合の問題点は、Rangeプロパティが使えないことだ。
例えば「A1形式」では、
Range("A1").Value="Microsoft"
と指定ができるが、「R1C1参照形式」では、
Range("R1C1").Value="Microsoft"
と指定するとエラーになる。この場合は
Cells(1,1)="Microsoft"
と指定する必要があるので、「R1C1参照形式」にした場合は注意が必要だ。
歴史的背景が気になる方は、各自調査を
今回は「R1C1参照形式」についての利点を解説した。「R1C1参照形式」について調べてみると、VBAを扱う場合においては「R1C1参照形式」の方が便利だと思ったのも事実だ。しかし、「A1形式」が通常のExcelのセル参照形式であるため、「A1形式」で進めても何ら問題はない。
VBAを使用しないなら「R1C1参照形式」のメリットは特にない。
「A1形式」「R1C1参照形式」の2つが存在するには、それなりの歴史的背景があるようだが、今回の連載では、そんな歴史的背景は関係がないので省かせていただいた。
著者プロフィール
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Copyright © ITmedia, Inc. All Rights Reserved.