今日を乗り切るExcel研究所

Excel に働かされていませんか

Excelを右クリックから読み取り専用で開きたい

今回は、Excelファイルを読み取り専用で開く方法その2です。読み取り専用 Excel ショートカットや読み取り専用ファイル属性を利用した方法を検討し、そのためのバッチも紹介します。

本当に知りたかったのは?

以前本ブログで、「 開いている Excel ブック」を読み取り専用に切り替える方法を紹介しました。

www.shegolab.jp

この記事は、ひと気のない当ブログにしてはけっこうなアクセス数があるようです。 自分的にはかなりマイナーな話題だと思っていたので、ちょっと意外な気がしています。

本当にその内容に需要があったのでしょうか。 実は単に Google などで検索した時のキーワードがかぶっていただけで、本当に読者が知りたかったことからすれば期待外れの記事だったのではないでしょうか。 タイトルもちょっと紛らわしかったかもしれません。

検索で来た人が本当に知りたかった/やりたかったことが何なのかは分かりませんが、Excel を読み取り専用で開く方法に関連したありそうな話題について、もういくつか掘り下げてみようと思います。

  • 右クリックからの「読み取り専用で開く」を使いたかった
  • 読み取り専用の Excel ショートカットを作成したかった
  • Excel ファイルを読み取り専用にしたかった

右クリックからの「読み取り専用で開く」を使いたかった

マウスで Excel ファイル(.xlsx)を選択してシフトキーを押しながら右クリックすると、コンテキストメニューに「読み取り専用で開く」というコマンドが出てきます。これは一種の「 隠しコマンド 」的な機能と言えます。

f:id:shego:20170517114245p:plain

しかし、これを実行してみても、実際には読み取り専用にはなりません。

その原因がこのコマンドの設定のちょっとした記述ミスにあることは以前から知られています。

本来なら Excel の更新プログラムなどを通じて修復してほしいものですが、なにしろ「隠しコマンド」の不具合なうえ、今まで長らく放置されてきたことをみれば、今後もあてにできそうもありません。

調べてみたところ、自分でこの不具合を修正するのは難しいことではないのですが、レジストリという Windows の根幹となるシステムデータベースを編集することになり、誤って Windows 自体を壊してしまうリスクを考えると、とても一般ユーザに紹介できることではありません。 (どうしても修正したければ、情シスの担当者に依頼してみてください。まあ、いやがるでしょうが。)

読み取り専用の Excel ショートカットを作成したかった

隠しコマンドの代替策として、「読み取り専用 Excel ショートカット」を使っている人も多いかと思います。

(ここで言う「ショートカット」とは便利なキー操作のことではなく、Windows 特有のリンクファイルのことです)

Excel 本体の実行プログラム(EXCEL.EXE)には、読み取り専用モードで起動するというオプションスイッチが用意されていて、これを付けて開いた Excel ブックは始めから読み取り専用モードとなります。

この読み取り専用オプションを追加した Excel ショートカットを作成し、たとえばコンテキストメニューの「送る」に追加しておけば、ファイルの右クリックからいつでも読み取り専用で Excel ブックを開くことができます。

f:id:shego:20180310195902p:plain

読み取り専用の Excel ショートカットを作成するには、スタートメニューなどから Excel ショートカットをコピーしてきて、そのプロパティの「ショートカット」タブにある「リンク先」を編集して Excel 実行プログラム名の後ろに読み取り専用スイッチ「 /r」を追記するだけです。

f:id:shego:20180310174051p:plain

問題は、コピーした Excel ショートカットで、「リンク先」の編集ができなくなっていることがあるということです。

f:id:shego:20180310174807p:plain

これが、Excel のバージョンによるのか、Windows の環境的な違いによるのか分りませんが、筆者の試せる環境で確認する限り、どうも Excel 2016 からそうなっているような感じです。

その場合仕方ないので、Excel ショートカットのコピーからではなく、新規ショートカットを作成することになります。

デスクトップのなどで右クリック>「新規」メニュー>「ショートカット」を実行すると、ウィザードが開きリンク先ファイルの入力を求められます。

ここにはインストール先の Excel 実行ファイル(EXCEL.EXE)をフルパス名で入力してやる必要があります。

Excel がどこにインストールされているかなんて知っていますか?

それは、EXCEL のバージョンやパッケージ、ビルドタイプ(32bit/64bit)、インストール方法、Windowsのバージョン、環境設定などよって異なります。 ”C:¥Program Files" フォルダや ”C:¥Program Files (x86)"あたりを手でたどって探すか、ファイル名で検索するなど、自分で調べるしかありません。

もうやってられませんね。

なので読み取り専用 Excel ショートカットを作成するバッチを作成しました。

@if(0)==(0) echo off
  setlocal
  for /f "tokens=2 delims==" %%a in ('assoc .xlsx') do set XLTYPE=%%a
  for /f "tokens=2 delims==" %%a in ('ftype %XLTYPE%') do set XLEXE=%%a
  cscript.exe //nologo //E:JScript "%~f0" %XLEXE%
  exit /b
@end
with (WScript.CreateObject("WScript.Shell").CreateShortcut("Excel [読み取り専用].lnk")) {
    TargetPath = WScript.Arguments(0);
    Arguments = "/r";
    Save();
}

【使い方】

  1. 上記バッチスクリプトをテキストエディタなどにコピー&ペーストし、バッチファイルとして保存します
    • 拡張子(ファイル名の最後の部分)を「.bat」にします
  2. 作成したバッチファイルをダブルクリックします
  3. 「Excel [読み取り専用]」というショートカットファイルが同じ場所に作成されます
    • ファイル名はお好みで変えてください
    • 適当な Excel ファイル(.xlsx)をこのショートカットにドラッグしてみて、読み取り専用モードで起動することを確認して下さい
  4. バッチファイルは削除します

このショートカットをコンテキストメニューの「送る」に追加しておけば、任意の Excel ファイルで右クリックから実行できます。 「送る」メニューに追加するには、エクスプローラのフォルダーパスに「shell:sendto」と入力すれば「SendTo」というフォルダが開くので、そこにこのショートカットファイルを移動するだけです。

さて、Excel 2016 で元のショートカットのリンク先が編集不可にされている理由はナゾですが、想像するに Windows アプリ化や Office 365 のクラウド展開か何かの関係で、 EXCEL.EXE を直接使わない実行方式に変更されたか、あるいは将来のバージョンでそうなる布石なのかもしれません。

だとしたら、「読み取り専用 ショートカット作戦」もいつか使えなくなる可能性があります。



Excel ファイルを読み取り専用にしたかった

本当は Excel ファイル自体を読み取り専用に変更したかったのかもしれません。

Window の機能として、ファイル属性に「読み取り専用」という項目があります。 これを有効にした Excel ファイルは、ショートカットなど介さなくても、普通に開くだけでも読み取り専用モードになります。

これを設定するには、対象ファイルを右クリックしてメニューの一番下の「プロパティ」を開き、「情報」タブにある「読み取り専用」チェックボックスにチェックを入れます。

f:id:shego:20180310183953p:plain

以降、Excel で普通に開くと常に読み取り専用モードとなります。

これも右クリックから一発でできたいですね。

以下のバッチは、ファイルに「読み取り専用」を設定した上でそのファイルを開きます。

@echo off
if exist "%~f1" if not exist "%~f1\*" (
    rename "%~f1" "%~nx1" 2> NUL && (
        attrib +R "%~f1"
        start "" "%~f1"
    ) || (
        echo %%~f1 は使用中なので読み取り専用にできません。& pause
    )
)

このバッチファイルを「送る」に置けば、Excel ショートカットのように右クリックから読み取り専用モードで開くことができます。

また、Excel 専用というわけではなく、Word や TXT など、どんなファイルでも読み取り専用で開きます。

ファイルを閉じた後も「読み取り専用」属性はオンのままオフに戻されないので、以降は普通に開けば読み取り専用モードになります。

読み取り専用をやめたければファイルのプロパティで「読み取り専用」チェックを外すだけです。

でももしファイルが沢山あったら、それも面倒ですね。これもバッチ化しておきましょう。

以下のバッチは複数ファイルの「読み取り専用」属性を一括で切り替えます。

@echo off
for %%f in (%*) do if exist "%%~ff" if not exist "%%~ff\*" (
    rename "%%~ff" "%%~nxf" 2> NUL && (
        echo %%~af| findstr /l "r" > NUL
        if errorlevel 1 (
            attrib +r "%%~ff"
        ) else (
            attrib -r "%%~ff"
        )
    ) || (
        echo 《使用中》   %%~ff 1>&2
    )
    attrib "%%~ff"
)
pause

このバッチファイルに複数選択したファイルをドラッグ&ドロップすると、各ファイルごとの「読み取り専用」属性のオン/オフ状態が切り替わります。フォルダは処理の対象外です。

処理結果は画面に表示されます。ファイル名の前に「R」の文字が出ているファイルが読み取り専用になったファイルです。

f:id:shego:20180310201210p:plain

いや、そういうことじゃなくて

本当に知りたかったのはこういうことなんだよ、というのがあれば教えて下さい。

参考にさせていただいたページ

関連記事

www.shegolab.jp