Excel VBA入門 その93:クリックしたオブジェクトの名前の取得方法

エクセルVBA VBA



VBAでオブジェクト(図形)をクリックしたときに「オブジェクトの名前」を取得するにはどのようにすればよいのでしょうか?

今回は、クリックしたオブジェクト(図形)の名前の取得方法について徹底的に説明していきます。



オブジェクトの名前は2種類ある

オブジェクトの名前と言っても、じつは、オブジェクトの名前は以下のように2種類あります。

  1. 処理の名前
  2. 表示の名前

先にみなさんが求めているであろう結論から言うと、VBAでオブジェクトの名前を指定してマクロを実行するときは、「処理の名前」を指定します。

それでは、「処理の名前」と「表示の名前」の違いについて説明していきます。

下の図を見てください。これは、「処理の名前」と「表示の名前」が違う例です。

オブジェクトをクリックすると画面左上の名前ボックスには「楕円1」と表示されているにも関わらず、マクロでオブジェクトの名前を表示させると「Oval 1」と表示されます。

「処理の名前」と「表示の名前」が異なっている

オブジェクトを作ったときには 自動で名前が付けられますが、この名前は「表示の名前」と「処理の名前」が違うのです。

名前がなぜか違うので混同しやすく、VBAでオブジェクトを扱う際に上手くできない原因の一つなのです。

それでは、2種類の名前の取得方法について、それぞれ説明していきます。

オブジェクトの名前1.「処理の名前」の取得方法

「処理の名前」は、VBAでオブジェクトの名前を指定するときの名前になります。

上記の例ですと、VBAでオブジェクトを扱うときには「Oval 1」を指定します。

「処理の名前」の取得方法は、オブジェクトをクリック(選択)した状態で、以下のコードのマクロを実行します。

Sub 処理の名前取得()
    MsgBox Selection.Name
End Sub

実行結果:

処理の名前を取得できる

オブジェクトの名前2.「表示の名前」の取得方法

「表示の名前」は、オブジェクトをクリックしたときにエクセル表の左上の「名前ボックス」に表示される名前です。

名前ボックスに「表示の名前」が表示される

「表示の名前」の取得方法は、取得したいオブジェクトに以下のコードのマクロを登録した後、対象のオブジェクトをクリックします。

Sub 表示の名前取得()
    MsgBox Application.Caller
End Sub

実行結果:

表示の名前を取得できる

「処理の名前」と「表示の名前」を同じにする

オブジェクトの名前には「処理の名前」と「表示の名前」の2種類がありますが、じつは、両者の名前を同じにすることができます。

それは、作成したオブジェクトに一つ一つに名前を付けることです。そうすると、表示の名前と 処理の名前が 同じになります。

名前の変更方法1:手入力で変更する

具体的には、エクセル上でオブジェクトをクリック(選択)して、左上の名前ボックスで任意の名前を手入力し、「Enter」キーを押すと、名前が変更され「処理の名前」と「表示の名前」が同じになります。

※名前を手入力した後に「Enter」キーを押さないと、変更されません。

「処理の名前」と「表示の名前」が同じになる

名前の変更方法2:VBAで変更する

名前の変更は、VBAでも変更することができます。以下のコードでは、オブジェクトの名前を「だえん1」に変更しています。

Sub 名前変更()
    Selection.Name = "だえん1" 
End Sub

オブジェクトの名前を変更しておけば、「処理の名前」と「表示の名前」が同じになり、VBAでオブジェクトの名前を指定するときに間違うことがなくなります。

コメント

  1. […] Excel VBA入門 その93:クリックしたオブジェクトの名前の取得方法 […]

タイトルとURLをコピーしました