はじめに
ExcelのHYPERLINK関数でファイルやフォルダへのハイパーリンクを作成する際に,
パスに#(ハッシュ記号)を含んでいると,#以降の文字列が無効となってしまい,
リンクが意図した動作をしない問題に対処した際のノートです.マクロは使用しません.
以下のリンク先に,"オフィスドキュメント内のハイパーリンクに#を使用することは認められていない"と書かれています.
"NOTE: The pound sign is a valid character to use in a file name but is not accepted in hyperlinks in Office documents."
You cannot use a pound character in a file name for a hyperlink in an Office program
環境
私がテストした環境は以下の通りです.
どちらの環境でも動作を確認できています.
- テスト環境1
- Windows 10
- Excel 2010
- テスト環境2
- Windows 7
- Excel 2013
解決策
解決策を以下に示します.
以下の2つの手順を踏み,パスを変換することで,対策が可能であることを確認しました.
パス変換手順
STEP-1. #
を %23
に変換する
-
#
を%23
に変換する手段(Excel関数) - SUBSTITUTE 関数 ~ Excel2007以降
- ENCODEURL 関数 ~ Excel2013以降
※ %23
は #
をURLエンコードした際の表記です.
(パーセントエンコーディング - Wikipedia)
STEP-2. パスの先頭に"file:///"を付加する.
※ file:///
はローカルファイルにアクセスするためのスキームです.
(URIスキーム(URLスキーム)とは - IT用語辞典)
パス変換の例
上述の手順を例で示すと以下の通りになります.
#を含むパスの例: C:\temp\#test.txt
STEP-1: C:\temp\%23test.txt
STEP-2: file:///C:\temp\%23test.txt
STEP1, 2をまとめたHYPERLINK関数の例
=HYPERLINK("file:///" & SUBSTITUTE("C:\temp\#test.txt", "#", "%23"))
これで,セルをクリックした際に"#test.txt"というテキストファイルが開けます.
ちなみに...
=HYPERLINK("C:\temp\#test.txt")
とそのまま入力すると,#以下が無効となるため,セルをクリックした際にC:\temp\
というフォルダが開いてしまいます.
また, =HYPERLINK("#A1")
などと記述することで,シート内の指定のセル(A1)にジャンプするリンクを作成できます(本来の使い方?).