2009年5月5日火曜日

Excel の VBA で名前を付けたセルの内容を参照

特定の範囲に名前を付ける

一つのセル、または、特定の範囲に名前を付けるには、セルを選択した後にワークシートの左上をクリックして名前を入力する。

例えば、セルA1 に “hoge” と名前を付けてみた。

090505-005

 

付けた名前を管理しているのは、メニューより「挿入 > 名前 > 定義」。ここで定義した名前を追加・削除できる。

先ほど定義した “hoge” が表示されている。

090505-006

ちなみに、ワークシートごとに名前空間があるのではなく、一つの Excel ファイルにおいて一意な名前を付けることができるようだ。

 

VBA で名前を付けたセルの値を参照

メニューより「ツール > マクロ > Visual Basic Editor」を選択し、標準モジュールを作成。(「挿入 > 標準モジュール」)

さて、セルの値を参照するにはどうすればいいのだろう? Visual Basic Editor 内において F1 でヘルプを表示し、「Microsoft Office Excel オブジェクト モデル」を見ると、Cell というのは見当たらず。

ところで、上記のように名前を付けるとき、範囲を指定して名前を付けることができた。ということは Range で操作できそうだ。

090505-007

ヘルプの Range コレクションによると、

セル、行、列、1 つ以上のセル範囲を含む選択範囲、または 3-D 範囲を表します。

標準モジュールにプロシージャを定義した。

Sub test()
    MsgBox Range("hoge").Value
End Sub

プロシージャ内で、F5 または F8 を押して動作を確認。

 

ちなみにセルを表わすものは、Worksheets オブジェクトのプロパティとして表現されていた。

2コメント:

匿名 さんのコメント...

Sheet1!hoge と、シートのローカル名として登録したほうが複数ワークシートで衝突しないので便利ですよ。

jutememo さんのコメント...

シートごとに定義したい場合は、自前で管理するしかないですよねぇ。
できれば Excel の方でシートごとに名前空間を管理してくれて、hoge と名前をつけけたセルに対して、Sheet!hoge と参照できるとよかったになぁと思います。