VBAでハイパーリンクを作ったけど、クリックしたとき『参照が正しくありません。』と出てしまい、うまく設定できないことがあります。
またSubAddressに変数を使うことはできないのでしょうか?
こういったお悩みにお答えします。
本記事の内容
1.VBAのハイパーリンクで「参照が正しくありません。」となる原因や対策は?
2.「SubAddress:=」の後に変数を使う方法は?
VBAでハイパーリンクを作成したはいいものの、クリックすると「参照が正しくありません。」とはじき返されることって、たまにありませんか?
一体なにが原因で、どのように対策すればいいのか。
また、SubAddressに変数を使う方法はどうすればいいのか、お答えしたいと思います。
ちなみに筆者は、Excelとマクロだけで、社内で年間約1000時間以上の業務効率化を達成した実績があります。
したがって、本記事の信頼性は高いといってもいいでしょう。
目次
VBAのハイパーリンクで参照が正しくありませんとなる原因と対策
VBAで作ったハイパーリンクをクリックしたとき、なぜ「参照が正しくありません。」と表示されるのでしょうか?
ここからは、原因や対策を解説していきます。
VBAのハイパーリンクで参照が正しくありませんと出る原因は?
この原因はずばり、NGな記号を含んでいるからです。
NGな文字列の例
たとえば、以下のようなシート名を設定しているとNGになります。
シート名を「(~~)」のようにすることって、よくありますよね。
やっかいです。
以上の通り、ハイパーリンクに記号を含めるとNGとなります。※
ではどのようにしたらいいでしょうか?
実は、この解決方法はいたってシンプルなんです。
※MicroSoftのヘルプには「シート名に記号を含めてはいけない」といった注意書きはありませんでした。
VBAのハイパーリンクで参照が正しくありませんと出る場合の対策は?
ということで解決方法は以下の通り、非常にシンプル。
対策
簡単ですよね。
文字列を「 ‘ 」で囲むだけでOKなんです。
シングルクォーテーションで囲んでみる
では実際にやってみましょう。
具体的には、以下のようにすれば大丈夫です。
SubAddress:=ws.Name & “!A1”
↓↓↓↓
SubAddress:=“‘” & ws.Name & “‘” & “!A1”
ここで注意すべきは、「 ‘ 」(シングルクォーテーション)を「 ” ” 」(ダブルクォーテーション)で囲むということです。
この辺は慣れるしかないですね。
実際のコードに落とし込んでみると、以下のようにすればいいでしょう。
1 2 3 4 5 |
wsIndex.Hyperlinks.Add _ Anchor:=wsIndex.Range("A1").Offset(myRow), _ Address:="", _ SubAddress:= ws.Name & "!A1", _ TextToDisplay:=ws.Name |
こちらを
1 2 3 4 5 |
wsIndex.Hyperlinks.Add _ Anchor:=wsIndex.Range("A1").Offset(myRow), _ Address:="", _ SubAddress:="'" & ws.Name & "'" & "!A1", _ TextToDisplay:=ws.Name |
こうするだけです!
以上の通り、文字列を「 ‘ 」(シングルクォーテーション)で囲えば、たとえNGの記号が入っていても問題なく動作します。
VBAのハイパーリンクでSubAddress:=の後に変数を使う方法は?
Hyperlinksコレクション.Addメソッドの引数は4つもあって、ややこしいですよね。
そこで、リンク先を指定する「SubAddress」の後の記述をスッキリさせるために、できるだけ変数を使いたいですよね。
例えば、
SubAddress:=”‘” & ws.Name & “‘” & “!A1”
↓
SubAddress:= 変数
このような感じにしたいですよね。
大丈夫です。この場合もとても簡単です。
さきほどの対策をしておけばバッチリ使えます!
変数の使い方
SubAddressに変数を使う方法は、以下の通りです。
変数 = ”‘” & ws.Name & “‘” & “!A1”
SubAddress:= 変数
このように、SubAddress:=の後に直接記述した場合と同じように、事前に変数に入れておけばOKです。
コードに落とし込んでみる
では実際に、コードに記述してみましょう。
1 2 3 4 5 6 7 8 9 10 11 |
'シート名格納用変数 Dim strSheetname As String '変数にシート名を入れておく strSheetname = "'" & ws.Name & "'" & "!A1" 'ハイパーリンクの追加 wsIndex.Hyperlinks.Add _ Anchor:=wsIndex.Range("A1").Offset(myRow), _ Address:="", _ SubAddress:=strSheetname, _ TextToDisplay:=ws.Name |
以上のようになります。
つまり、
①事前に、変数「strSheetname」を宣言
②変数「strSheetname」にシート名を格納する
③SubAddress:=に、変数「strSheetname」を入れる
とても簡単ですよね!
とにかく、「 ‘ 」(シングルクォーテーション)の囲み忘れには注意しておきましょう。
VBAのハイパーリンクでSubAddressに変数を使う方法のまとめ
ということで、ハイパーリンクで「参照が正しくありません。」と表示されてしまう原因と対策、「SubAddressに変数を使う方法」について解説させていただきました。
いかがでしたでしょうか?
実は私も2~3年前、同じようなところでつまづいて、1~2日くらい頭を悩ませていた経験があったんです。
読者のみなさんには、こういったお悩みで、大切な時間をかけてほしくありませんので、これからもお役に立つ情報を発信していきたいと思います!
最後までご覧くださり、ありがとうございました。