連載
» 2014年06月06日 18時00分 UPDATE

VBA/マクロ便利Tips:セルのマクロが作りやすくなるExcelの「R1C1参照形式」

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、セルの番地を指定する際の通常の「A1形式」とは異なる「R1C1参照形式」について、その概要と設定の仕方、利点・欠点、それを利用したマクロ例を紹介。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


 セルの番地を指定する場合は、通常は「A1形式」がデフォルト値となっている。例えば、A1、A2……、B1、B2……と指定するのが「A1形式」だ。実は、このセル番地の指定方式にはもう1つ、「R1C1参照形式」というものも存在するのだが、ご存じだろうか。

 今回は、この「R1C1参照形式」の利点について考えてみよう。

「R1C1参照形式」を使用するには

 この形式を使用する場合はExcelメニューの[ファイル]→[オプション]と選択し[数式]を選択して、[R1C1参照形式を使用する]にチェックを付ける(図1)。

vba_r1c1_01.jpg 図1 「R1C1参照形式を使用する」にチェックを付ける

 A1形式を使用している場合は、例えばA1を選択している場合、「列」が図2のように「A」と表示される。

vba_r1c1_02.jpg 図2 「A1形式」で「A列1行目」を選択した

 「R1C1参照形式」では、「列」は「C1」のように表示される(図3)。

vba_r1c1_03.jpg 図3 「R1C1参照形式」で「1行1列目」を選択した

 「R1C1参照形式」では、もうお分かりだと思うが、RはRowの「行」を表し、CはColumnの「列」を表している。よって図3では1行目の列1列目を選択している意味になる。それに、図2と図3を見比べると図2の列はアルファベット表記だが、図3は数値で表示されている。

「R1C1参照形式」の利点

 例えば図4のようなデータがあるとしよう。

vba_r1c1_04.jpg 図4 A1からAAまで「Excel VBA」という文字が入力されている

 「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
リスト1 全ての「Excel VBA」の文字色を赤に変えるマクロ

 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のように表示される。

vba_r1c1_05.jpg 図5 「A1形式」での、A1からAAまでを「R1C1参照形式」で表示させた。図が小さいと見づらいので一部分だけを大きく掲載した

 図4と図5を見比べると分かるが、先にも書いたように、列番号が数値で表示されている。これなら例えば「AA」の列が何列目に当たるかをいちいち数える必要がない。

 このように「R1C1参照形式」では、「行」も「列番号」も全て数値で表示されるために、VBAを書く上では非常に便利ではあるが、デフォルトが「A1形式」になっているし、ほとんどのExcel VBAの解説では「A1形式」が用いられているため、本Tips連載でも「A1形式」で解説している。

 リスト1を実行すると、図6のように表示される。

vba_r1c1_06.jpg 図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つが存在するには、それなりの歴史的背景があるようだが、今回の連載では、そんな歴史的背景は関係がないので省かせていただいた。

著者プロフィール

kuniyasu.jpg

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。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© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。