Excel のセルに名前を付けよう

2021年10月27日 2023年11月8日
カテゴリ: IT入門
Excel ExcelVBA

Excel のセル ≒ 変数

プログラミング未経験の人でも Excel の関数を使うことってよくあると思うのですが、この Excel 関数ではプログラミングのキホンともいえる概念をごく自然に扱っています。
その一つがセルです。

とっても基本的なことですが、Excel のセルにはアドレスというものが存在します。
このセルのアドレスがプログラミングでいうところの変数ととっても近い働きをします。

セル A1 に数値 100 を、セル B1 に数値 200 を入力した上でセル C1 に = A1 + B1 と入力すると、セル C1 には セル A1 とセル B1 の数値を合計した値 300 が表示されるはずです。

これをプログラムで書くと以下のような感じになるでしょうか。

A1 = 100
B1 = 200
C1 = A1 + B1

何をいまさらって感じですが、これって結構大事な概念だと思うのです。

セルに名前を付ける方法

で、ここからが本題なんですが Excel のセルにもプログラミングの変数と同様に好きな名前を付けることができるのです。

A1 とか B1 とかだと何の値なのかよくわからないですよね?
セルに名前を付けるとその名前で関数が書けたりするのです!

セルに名前を付ける方法は次の通りで、名前ボックスに好きな名前を入力するだけです。

Enter で確定するのを忘れないようにしましょう。

個人的には抵抗がありますが、セル名には日本語も使えます。

セルの名前は好きに付けることができますが、いくつかルールがあります。
1. 先頭に数値は使えない
2. アルファベット + 数値は使えない
3. 記号は _ (アンダースコア) のみ使える
4. 同じ名前は使えない

先頭に数値は使えない

たとえば「100」とか「2ABC」といったように先頭の文字が数字のものはセルの名前には使用できません。
数字は全角半角問わず先頭の文字には使えません。

アルファベット + 数値は使えない

たとえば「CAT100」とか「ABC123」といったようにアルファベット + 数字のものはセルの名前には使用できません。( アルファベット + 数値 + アルファベット とかなら OK です )
これはセルのアドレスのネーミングルールと同じなので、区別が付けられないため NG ということだと思います。
これも全角半角問わず使えません。

記号は _ (アンダースコア) のみ使える

たとえば「CAT-100」とか「test@abc」といったように _ (アンダースコア) 以外の記号が入っているものはセルの名前には使用できません。
これも全角半角問わず使えません。
また、アンダースコアなら全角も半角も使えます。

同じ名前は使えない

他のセルに付けた名前を別のセルの名前に使うことはできません。

同じカテゴリのデータを扱うセルには追番を付ける方法が一般的かと思います。
たとえば「CAT_1」「CAT_2」という感じです。

一度付けた名前の削除は後ほど説明します。

セルに名前を付けるメリット

そもそもセルに名前を付けるメリットはというと、以下の点が考えられるでしょう。
1. Excel 関数内で名前が使用できる
2. ExcelVBA からも利用できる

Excel 関数内で名前が使用できる

セルをアドレスではなく、自分でつけた名前で指定できるのでどんなデータを計算に使用しているのかとても分かりやすくなります。

ExcelVBA からも利用できる

個人的にはこちらのメリットの方が大きいです。

たとえば、セルの指定をアドレスで行うと以下のようになりますが

Sub test1()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(1)

    Dim value1 As Integer
    Dim value2 As Integer
    value1 = ws.Range("A1").Value ' セルをアドレスで指定
    value2 = ws.Range("B1").Value ' セルをアドレスで指定

    Debug.Print value1 + value2
End Sub

セルに名前を付けておけば次のようにもできます。

Sub test2()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(1)

    Dim value1 As Integer
    Dim value2 As Integer
    value1 = ws.Range("CAT_1").Value ' セルを名前で指定
    value2 = ws.Range("CAT_2").Value ' セルを名前で指定

    Debug.Print value1 + value2
End Sub

たったそれだけ?と感じるかもしれませんが、ExcelVBA で扱いたいセルが多くなるほどセルのアドレスの確認も大変になるし、意味の分かる名前にしておけば後でプログラムを見直したときに内容を理解しやすくなります。

注意点

セルに名前を付ける際にはいくつか注意点があります。

  1. 名前を付けたセルを削除すると...
  2. ひとつのセルに複数の名前が付けられる

名前を付けたセルを削除すると...

名前を付けたセルをクリア (Delete キー) ではなく削除するとどうなるでしょう。
当然のことながらその名前を付けたセルは消えてしまいます。

名前でセルを参照していたセルもエラー表示になってしまいます。

名前を付けたセルを間違って削除しないようにシートの保護は忘れないようにしましょう。

ひとつのセルに複数の名前が付けられる

セルには複数の名前を付けることができます。
できます、というよりもできてしまいます

付けた名前はどれも有効ですが、正直意味を感じません。

よくあるパターンとしては、名前を付けなおすために名前ボックスに新しい名前を入力という状況でしょうか。
新しい名前は命名ルールに則っていれば問題なく反映されるでしょう。
ですが、この方法だと古い方の名前も消えずに残ってしまいます。

名前ボックスにはそのセルの名前をソートした先頭のものが表示されるようなので、複数の名前が設定されていても他の名前はここからでは確認できません。

消したと思った名前を他のセルで使用しようとすると、すでに同じ名前が定義されているので使えないという状況に陥るでしょう。

定義した名前の管理

定義した名前の確認や削除は [ 数式 ] → [ 定義された名前 ] → [ 名前の管理 ] から行います。

削除する場合は対象を選択して [ 削除 ] ボタンを押すだけです。

関連の記事

ExcelVBA で時間が正しく変換されない

ExcelVBAでランダムな文字列を生成する方法

ExcelVBA でランダムな整数を生成する方法

OpenPyXl でチェックボックスを押したい