シーゴの Excel 研究室

タイトル変更しました (旧称:今日を乗り切るExcel研究所)

Excel ファイルの保護ビューを外したい

今回は、Excel ファイルの「保護ビュー」を外す方法について調べます。

保護ビュー、再び

このご時世のテレワークにともなって、Excel で「保護ビュー」とかいう何もできない状態に遭遇することも増えたのではないでしょうか。

保護ビュー 注意―インターネットから入手したファイルは、ウイルスに感染している可能性があります。編集をする必要がなければ、保護ビューのままにしておくことをお勧めします。

保護ビューについては、以前このブログで解説記事を書いたことがありました。

その時の結論としては、信頼できる仕事の関係者同士でファイルを取りしている分には、保護ビューを外しちゃって問題ないということでした。

保護ビューになってももう慌てません。おもむろに「編集を有効にする」ボタンを押して解除してやります。

そのあとおもむろに編集など加えては、折をみて保存もするでしょう。

おっと、ダウンロードフォルダで上書き保存してしまいましたね。

おもむろにマウスをとり、ファイルを文書フォルダに移動します。 ファイル名もちょっと変更しておきましょうか。

で、編集の続きをしようと思い立って、またその Excel ファイルを開くわけです、おもむろに。

すると、おぅ何てことでしょう!保護ビューが復活しているのです!!

これは一体どういうことなんでしょうか。

この記事では、Excel ファイルから保護ビューを完全に外してやる方法がないかを調べていきます。

  1. 保護ビューを解除するには
  2. 保護ビューを削除するには
  3. 保護ビューを無効にするには
  4. なぜ保護ビューが復活するのか

1. 保護ビューを解除するには

保護ビューが復活してしまって、もまた解除するのはわけありません。 黄色のバーにある「編集を有効にする(E)」ボタンをまた押すだけです。

とはいえ、いちいちマウスでボタンを押させられるのもイラっとしますね。 出来ればキーボードショートカットの一発で瞬殺したいところです。

よく見るとボタンのラベルには「(E)」とかいう思わせぶりな表記があるのですが、 これは飾りです。 AltCtrl といったキーをいくら組み合わせたところで実行されることはありません。 見かけ倒しというか意地悪というか まあ、 地味な嫌がらせということでしょう。

くっ!負けませんよ。

せめてマウスを使わずにキー操作だけで保護ビューを解除する方法がないか調べました。 以下の2つ使えそうです。

  • 編集アラートで解除する
  • クイック アクセス ツール バーで解除する

編集アラートで解除する

保護ビューのまま シートに編集を加えようとすると 以下のようなアラートのダイアログが表示されます。

ここにも「編集を有効にする(E)」ボタンが出てきます。 この「(E)」は飾りではありません。 すかさず E キーを叩けば保護ビューが解除されます。

このアラート自体を表示させるには、保護ビューの状態からファンクションキーの F2 を押すのが一番簡単です。

今後保護ビューに出くわしても、速攻で F2E と連打してやれば即解除できるのです。

ただ、ノートPCをご使用の場合、キーボードの配列によってはファンクションキーを叩くのに、もうワンクッションかかるのが微妙かもしれません。

クイックアクセスツールバーで解除する

「クイック アクセス ツール バー」に「編集を有効にする」コマンドを 配置する方法もあります。 クイック アクセス ツール バーは よく使う機能を Excel ウィンドウのタイトルバーに並べて、 すぐに呼び出せるようにしたものです。

ここにボタンを登録すると、Alt+数字 のショートカットで保護ビューの解除ができるようになります。 数字はコマンドアイコンの並び位置による番号で、すでに登録されているコマンドの数によって決まります。

クイックアクセスツールバーに「編集を有効にする」を登録する手順は以下のようになります。

【手順例】

  1. Excel ウィンドウのタイトルバーにある▼ボタンで「クイック アクセス ツール バーのユーザ設定」のメニューを開きます
  2. 「その他のコマンド」を選択します
  3. 「Excel のオプション」から「クイック アクセス ツール バー」の設定画面が開きます

  4. 左の「コマンドの選択」ドロップダウンから「ファイル タブ」を選択します

  5. 左の「コマンドの選択」の一覧から「編集を有効にする」を右の一覧に追加します
    • 「コマンドの選択」選択し、ダブルクリックするか「追加」ボタンを押します
  6. 「クイック アクセス ツール バーのユーザー設定」ドロップダウンは「全てのドキュメントに適用(規定)」のままにしておきます
  7. 「OK」ボタンを押して設定画面を閉じます

これで、クイック アクセス ツール バーに「編集を有効にする」アイコンが表示されます。

ただ、普段は無効化されているので押せません。

しかし保護ビュー状態になるちゃんと有効になり、Alt+数字 のショートカットも使えるようになります。 ショートカットの数字が何番になっているのかは Alt キーを押せば確認できます。(下図では 5

どうでしょうか。

まあ、すぐに解除できるとはいえ、何度も復活されるのも煩わしいですね。 保護ビューが復活しないように完全に解除するというのはできないのでしょうか。

 



 

2. 保護ビューを削除するには

そもそも、あるファイルを保護ビューで開くべきかどうかを、Excel はどのように判断しているのでしょうか。

Web サイトなどからダウンロードされたファイルは、セキュリティー上の信頼度が劣るとみなされます。 どことも知れない入手先から得たファイルは、ウイルスなどのマルウェアに汚染されているおそれがあるからです。

そこで Windows では、ファイルをダウンロードしたときにある種のセキュリティ情報(ZoneId)を付与することになっています1。 これは普通は見えない特殊なデータで、インターネットから取得したファイルであることを区別するための目印です。

これが付いているファイルは、要注意な、いわば「フダ付き」のファイルとして、システムの保護観察対象の扱いとなるのです。

Excel も当然、そのフダを見ています。 フダ付きの Excel ファイルを開くと、Excel は念のため安全に隔離され操作の限定された状態にブックを置きます。

それが保護ビューとして遭遇する動作モードなのです。

セキュリティ情報はファイルについてまわります。

フダ付きファイルはコピーしてもフダ付きです。 フダ付きの ZIP ファイルから取り出したファイルもまた、もれなくフダ付き仲間です。

そして、たとえ「編集を有効にする」で保護ビューを解除してやったとしても、相変わらずフダ付きのままなのです。

逆にいうと、このフダをファイルから削除さえしてしまえれば、もう二度と保護ビューにはならなくなるはずです。

セキュリティー情報を削除する

ファイルの「プロパティ」ダイアログで、セキュリティ情報のフダを削除できます。

ファイルのプロパティを開くには ファイルを右クリックして メニューから「プロパティ」を選択するか、 あるいはファイル選択したままAlt + Enterを叩きます。

もしプロパティダイアログの一番下に「セキュリティ」というセクションがあり、注意書きのような文言が表示されていたら、それはセキュリティ情報の付与された、フダ付きファイルです。

そしてその右を見ると「許可する」という謎のチェックボックスがあります。 何の許可なのかちょっと意味が分かりませんが、とりあえずこのチェックをオンにして「OK」を押してみます。

再びプロパティを開くと、なんと「セキュリティ」がまっさらに消えています。

Excel でこのファイルを開いてみても、保護ビューにはなりません。 ファイル名を変更したりフォルダーを移動したりしても復活しません。 この「許可する」チェックがフダを削除するコマンドだったのです2

これでついに、晴れて無罪放免、フダなしファイルとなりました。

セキュリティ情報を検索するバッチ

さてそうすると、今までに保護ビューを解除してきたファイルでも、2度と復活しないようフダをきれいに削除しておきたくなりますね。

さっそく隠れフダ付きファイルを探し出したいところですが、Windows にはセキュリティ情報を元にファイルを検索する機能がありません。 また複数ファイルのプロパティを一括で開くような方法もありません3

そこで、フダ付きファイルを検索して一覧表示するバッチを書いてみました。

@echo off
for /F "delims=*" %%f in ('dir /a-d-h-s /s /b "%~f1"') do (
    echo %%~ff
    for /F %%x in ('dir /r "%%~ff" ^| findstr /l :Zone.Identifier:$DATA') do (
        echo %%~ff
    )
)
pause
exit /b

上記バッチスクリプトを保存し拡張子を.bat とし、そのアイコンに検索したいフォルダのアイコンをドラッグ&ドロップします。 もしファイル名が表示されればそれがフダ付きファイルです。

フォルダによっては、大量のファイルがわらわらと出てくるかもしれません。 (もしバッチが終わらなくて中断したい場合には Ctrl + C を押してください)

これらを一つ一つプロパティを開いてチェックを外していくなんて、手作業ではやっていられませんね。

そこで複数ファイルのセキュリティ情報を一括で削除する バッチも作成してみました。

セキュリティ情報を一括削除するバッチ

@echo off
setlocal & set PS1="%TEMP%\%~n0.%RANDOM%.ps1"
more +4 "%~f0">%PS1% && powershell -nop -exec bypass -f %PS1% %*
del %PS1% & pause & exit /b

$args -match '\.xlsx$' |
  ?{ Test-Path -LiteralPath $_  } |
  ?{ Get-Item -LiteralPath $_ -Stream Zone.Identifier -ErrorAction SilentlyContinue } |
  %{ $_; UnBlock-File -LiteralPath $_ }

このバッチファイルのアイコンに複数 Excel ファイルをドラッグドロップ すると、まとめてセキュリティ情報が削除されます。 フダ付きでないカタギのファイルが混ざっていても問題ありません。

【注意】 上記バッチでは不用意に意図しないファイルまで処理されないよう、対象をExcel ファイル(XLSX)のみに制限しています。 またフォルダを指定されてもその中のファイルは処理しません。

結果として実際に処理されたファイル名のみコマンド画面に表示されます。 もし何も表示されなかったらそれはフダ付きファイルがいなかったということです。

ファイルを右クリックして表示される「送る」メニューにこのバッチを追加しておけば使い勝手が良くなるでしょう。 バッチを「送る」に追加するには、エクスプローラーのアドレスバーに「sendto」と 入力すると開くフォルダにバッチファイルを保存します。

ただし、むやみにセキュリティ情報を削除するのはあまりお勧めできません。 素性が明らかであり確実に信頼できるファイルであることがわかっているファイルに限定して使用してください。

本来、あえてセキュリティ情報を削除する必要性はないのです。 またそのまま残しておけば、それはそれで役に立つことすらなきにしもあらずです。 (例えばExcelファイルをどこからダウンロードしたのか思い出したいときなど)

それなら、ファイル側ではなく、Excel の方でフダ付きのチェックをさせなくすることはできないのでしょうか。

3. 保護ビューを無効にするには

保護ビューを解除してもセキュリティ情報のフダが削除されたりしないのなら、保護ビューを解除されたファイルであることを、Excel はどうやって知ることができるのでしょうか。

実は Excel 自身が、保護ビューを解除されたファイルを覚えているのです。

ユーザが保護ビューを解除すると、Excel はそのファイルを「信頼済み」として記録します。

その記録はファイル自体を変更するものではなく、Excel 側で管理しているホワイトリストに保存されます。 これは言ってみれば与信台帳のようなものです。

次にそのフダ付きファイルを開いたとき、 Excel はその台帳をチェックして、すでに記帳があれば保護ビューを免除します。 もし台帳になければ保護ビュー行きです。

つまり、保護ビューになるのを止めさせたければ、フダ付きファイルの与信チェック自体を取り止めればいいのです。

保護ビューを無効化する

保護ビューの判定を無効化する設定項目が、Excel 設定の深いところにあります。

  • 「ファイル」タブ
    • 「オプション」
      • 「トラストセンター」(あるいは「セキュリティーセンター」4
        • 「トラストセンターの設定」ボタン(あるいは「セキュリティーセンター」ボタン)
          • 「保護ビュー」
            • 「インターネットから取得したファイルに対して保護ビューを有効にする」チェックボックス

「 インターネットから〜」チェックボックスはデフォルトでオンになっていますが、このチェックを外すとインターネットからのダウンロードファイルを開いても保護ビューにならなくなります。

この設定で、ファイルの与信チェック自体を取り止めるので、たとえフダ付きファイルであっても無条件にスルーされます。

ただし、保護ビューをむやみに無効化するのはお勧めしません。

設定の注意書きにもありますが、これはPCのセキュリティレベルを下げる変更です。

特に企業や組織内の場合、IT環境のセキュリティ対策は会社のシステム管理者によって管理されているものです。 問題ないと思っても、個人都合の勝手な判断で変更していいものではないでしょう。 必要なら、システム管理の人に相談してみてください。

 



 

4. なぜ保護ビューが復活するのか

ところで保護ビューを解除したファイルをちゃんと記録しているというのなら、どうして保護ビューが復活したりするのでしょうか。それが謎のままです。

保護ビューの解除で与信台帳に記帳されているのは、フルパスのファイル名、すなわち全てのフォルダ階層をたどったファイル名です。

フダ付きファイルを開くときに台帳と突き合わせるのも、そのフルパスのファイル名です。

なのでもし、Excel ファイルのほうでファイル名の変更やフォルダの移動をされてしまうと、チェックしたいフルパス名も変わってしまいます。 当然台帳の記録と一致しなくなり引っかからないので、信頼できない要注意なファイルとして判定されるのです。

これが保護ビューの復活する理由です。

信頼済みドキュメント

この台帳は正式には「信頼済みドキュメント」といいます。 以下のマクロで、信頼済みドキュメントに記録されている内容を確認することができます。

Option Explicit

Type TrustRecord
    trTime As Date
    trType As Long
End Type

Sub 信頼済みExcelファイル一覧()
    Const HKEY_CURRENT_USER = &H80000001
    Const WMI_REG_BINARY = 3
    
    Dim reg As Object
    Dim regKey As String
    Dim valNames As Variant
    Dim valTypes As Variant
    
    Set reg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    regKey = "SOFTWARE\Microsoft\Office\" & Application.Version & "\Excel\Security\Trusted Documents\TrustRecords"
        
    Worksheets.Add
    
    Dim cur As Range
    Set cur = Range("A1:C1")
    cur = Array("信頼種別", "ファイル作成日", "ファイル名")
    Set cur = cur.Offset(1)
    Range("B:B").NumberFormat = "yyyy/mm/dd hh:mm:ss"

    reg.EnumValues HKEY_CURRENT_USER, regKey, valNames, valTypes
    
    Dim fname As Variant
    For Each fname In valNames
        Dim valBytes As Variant
        reg.GetBinaryValue HKEY_CURRENT_USER, regKey, fname, valBytes
        
        Dim trData As TrustRecord
        trData = parseTrustRecordValue(valBytes)
        
        cur = Array( _
            trData.trType, _
            IIf(trData.trTime <> 0, CDbl(trData.trTime), ""), _
            fname _
        )
        Set cur = cur.Offset(1)
    Next

    Range("A:C").Columns.AutoFit
End Sub

Private Function parseTrustRecordValue(valBytes As Variant) As TrustRecord
    Dim i As Integer
    
    Dim decFileTime As Variant
    decFileTime = CDec(0)
    For i = 7 To 0 Step -1
        decFileTime = decFileTime * 256 + valBytes(i)
    Next
    
    Dim hexDwrd As String
    hexDwrd = "&H"
    For i = 23 To 20 Step -1
        hexDwrd = hexDwrd & Hex(valBytes(i))
    Next
    
    parseTrustRecordValue.trTime = IIf(decFileTime <> 0, fileTimeToDate(decFileTime), CDate(0))
    parseTrustRecordValue.trType = CLng(hexDwrd)
End Function

Private Function fileTimeToDate(decFileTime As Variant) As Date
    With CreateObject("WbemScripting.SWbemDateTime")
        .SetFileTime CStr(decFileTime), False
        fileTimeToDate = .GetVarDate(True)
    End With
End Function

信頼済みドキュメントにはこれまで保護ビューを解除してきた Excel ファイル名が全て記録されています。

また、信頼済みドキュメントで管理されているのはフダ付きファイルだけではありません。

マクロや Power Query、データベースへの接続があるようなファイルで「コンテンツの有効化」ボタンを押したことのある Excel ファイルも記帳されています。

ファイル名が httpsで始まるURL で記録されているファイルもあるかもしれません。 これらは OneDrive や SharePoint といったクラウドにあるファイルたちです。

信頼済みドキュメントをクリアする

先のマクロを試された方は、 今は亡き懐かしいファイルがたくさん残っていることに気がついたかもしれません。

信頼済みドキュメントには登録される一方なので、 そのファイルがなくなったとしても削除する機会がなく、 ずっとゴミデータとして残るのです。 害もないのでそのまま放置してかまわないのですが、潔癖症の人は知りたくなかったかもしれません。

ゴミデータだけを掃除する機能はありませんが、 信頼済みドキュメントの中身をすべて削除して空にすることならできます。

先の「ドラフトセンター」に「信頼済みドキュメント」という設定がありますが、 そこに「クリア」というボタンがあります。 これが信頼済みドキュメントの記録を全て消し去るコマンドです。

このボタンを押すにはちょっとした勇気と覚悟が要ります。

ゴミデータがなくなる一方、当然、信頼したはずのファイルも全て忘れられて保護ビューが復活します。 保護ビューの解除はやり直しです。

それだけならましで、信頼済みドキュメントにマクロや Power Query、外部DB接続などを許可したファイルが含まれている場合も、その警告も復活するようになります。 例えば、お使いの PC でそれらをを呼び出すようなタスクやオートメーションシステムが組まれている場合、動かなくなる危険性があります。

クリアしたとて何かいいことがあるわけではありませんので、放置でいいでしょう。

まとめ

インターネットからダウンロードされたファイルには特別なセキュリティ情報が付与されます。

Excelは、セキュリティ情報のついたファイルを保護ビューとして開きます。

ユーザが保護ビューを解除すると「信頼済みドキュメント」として記録され、以降は保護ビューが免除されます。

本記事ではそれらの仕組みを踏まえ、保護ビューを外すために「解除」、「削除」、「無効化」といった方法を紹介し、信頼済みドキュメントを「クリア」できることに触れました。

ただし、どれもセキュリティ上のリスクを伴うので、実行する場合は慎重にお願いします。

関連記事

www.shegolab.jp

www.shegolab.jp

変更履歴

  • [2022/09/02] 文言修正

  1. 実際にこれをつけるのは Web ブラウザなどのアプリケーションの責任です。

  2. 昔の Windows では「ブロックの解除」というもうちょっと分かりやすい名前でした。

  3. Alt キーを押しながら 次々とファイルをダブルクリックしていけば少しは高速に開けます。

  4. 昔の Excel では「セキュリティセンター」だったような気ましますが、いつからか「トラストセンター」に変更されたようです。