ハイパーリンクは読み取り専用で開けない
ブックをエクスプローラから探して開くのは結構時間がかかる作業です。そこで、Excelのセルに他のブックのパスを書いてハイパーリンクを設定して、クリックして便利に開けるようにすることがあります。
ハイパーリンクは便利な機能ではありますが、ブックをどのように開くかの条件は指定できないため、エクスプローラでダブルクリックしたのと同じ動作になります。
自分しか使わないブックであればそれでもいいかもしれませんが、仕事などで複数の人が使うブックの場合は、編集をしないのであれば読み取り専用で参照だけをするような使い方が望ましいです。
以下のマクロはセルに書かれているブックのパスや、ハイパーリンクのパスを読み取り専用で開きます。
補足:VBAを使わずにExcelブックを読み取り専用で開く方法
VBAを使わずにExcelブックを読み取り専用で開く方法は主に2つあります。どちらでもいいですが、個人的には1番目の方法を使っています。
1. 送るメニューに追加する方法
以下は、エクスプローラでブックを右クリック→送る→読み取り専用で開くショートカット、を用意する方法です。最初だけ設定が面倒ですが、一度設定すればそれ以降はずっと使えます。
以下でEXCEL.EXEのパスをMicrosoft 365想定で書いていますが、バージョンに関わらず取得する場合は「VBAでExcel.exeのフォルダやフルパスを取得する」をご参照ください。
- SendToフォルダを開いておきます。ショートカット作成用です。
パスは「C:\Users\ログインユーザ名\AppData\Roaming\Microsoft\Windows\SendTo」です。 - EXCEL.EXE本体のショートカットを上記SendToフォルダに置きます。
EXCEL.EXEの本体の場所はMicrosoft 365であれば「”C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE”」になります。 - SendToに置いたショートカットのプロパティを開き、右端に「 /r」(/rの左は半角スペース)を付けてOKを押します。
Microsoft 365であれば「”C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE” /r」になります。/rの左には半角スペースを1つ入れます。 - 作成したショートカットのファイル名を「Excel読み取り専用」や「Excel ReadOnly」など分かりやすい名前に変更しておきます。
- あとは、ブックを右クリック→送る→Excel ReadOnly を選ぶことで、読み取り専用で開きます。
補足しますと、「/r」は起動スイッチと呼ばれるもので、他にもいくつかあります。「 /x」(/xの左は半角スペース)を付ければ新規のExcelアプリケーションを起動してそちらで開きます。「C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE” /x /r」とすれば、新規Excel+読み取り専用で開きます。
2. Shiftキー+読み取り専用で開く、メニューを使う方法(要レジストリ修正)
他の方法として、エクスプローラーでShiftキーを押しながらブックを右クリックすると「読み取り専用で開く」とメニュー表示されます、、、が、それを選択しても読み取り専用にならず、レジストリを編集しないと読み取り専用になりません。
レジストリの編集は、Microsoft 365の場合はRegeditを開き(スタートメニュー右クリック→ファイル名を指定して実行→Regeditと入力してEnter)、「HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\OpenAsReadOnly\command」の既定を、
「”C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE” /h “%1″」
から
「”C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE” /r “%1″」
に変更することで、Shiftキー+右クリックで読み取り専用で開くようになります。
なお、レジストリ編集直後から適用されます。PCやExcelの再起動は不要です。
ブックのパスを読み取り専用で開くマクロ
セルにブックのパスがそのまま書いてある場合であれば、そのセルを選択して以下のマクロを実行すると、対象のブックが読み取り専用で開きます。
セルにブックのパスが書いてあればそれでいいので、ハイパーリンクでなくても構いません。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub OpenBookReadOnly() Dim e As String '// EXCEL.EXEのフルパス Dim r As Range '// アクティブセルのRangeオブジェクト '// EXCEL.EXEのフルパスに読み取り専用オプションを付けてを設定 e = """C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"" /r " '// アクティブセルのRangeオブジェクトを取得 Set r = ActiveCell '// 対象ブックを開く Call Shell(e & r.Value) End Sub |
ハイパーリンクのパスを読み取り専用で開くマクロ
使い方は上のコードと同じで、ブックへのハイパーリンクが設定されているセルを選択して以下のマクロを実行すると、対象のブックが読み取り専用で開きます。
コード自体も上のコードとほとんど同じですが、ハイパーリンクの場合はブックのパスを取得する方法が異なるため、その箇所だけ異なっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub OpenHyperLinkReadOnly() Dim e As String '// EXCEL.EXEのフルパス Dim r As Range '// アクティブセルのRangeオブジェクト '// EXCEL.EXEのフルパスに読み取り専用オプションを付けてを設定 e = """C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"" /r " '// アクティブセルのRangeオブジェクトを取得 Set r = ActiveCell '// ハイパーリンクのブックを開く Call Shell(e & r.Hyperlinks.Item(1).Address) End Sub |