Excelはマクロウィルス対策として、マクロを持つワークブックを開く時の制限の設定を行なうようになっています。
Excel2007以降は「レベル」という考え方がなくなりました。 このページでは、Excel2002以降の各バージョンのマクロセキュリティの設定について順に説明していきますが、 Excel2003までは「高」「中」「低」といった「レベル」という考え方で機能を設定していて、高い方が良いといった感覚に受け取られると思います。
ですが、これがExcel2007以降になると「高」「中」「低」という記号がなくなり、上の方の記載が単にレベルが高いわけでもなくなりました。
考えてみれば、マクロはExcelに標準に搭載されている機能なのですが、一方でこれを「悪者」扱いしているわけです。 「コンピュータに損害を与える可能性があるマクロ」などという表記がありますが、別にマクロのコードを評価しているわけではなくて、マクロすべてを制限しているだけの機能です。
最近ではセキュリティソフトの方が進んでいて、マクロの動作・ふるまいを解析して評価して動作を制限してくれますから、そちらに任せてしまった方が良いという考え方もあるかもしれません。

Excel2002でのセキュリティ設定と動作

下の画像は、Excel2002の「セキュリティ」の設定画面です。
セキュリティ(Excel2002)

「セキュリティ」の設定画面は、メニューバーの「ツール」から「マクロ」→「セキュリティ」を選択すると表示されます。
ここでの「高」「中」「低」の設定によって、マクロを持つExcelワークブックを立ち上げる際に以下のように影響します。

レベル 説明 備考

(デフォルト)
信頼できる作成元からの署名付きのマクロだけを実行することができます。署名のないマクロは自動的に実行不可になります。

外部スクリプト等からExcelを起動する場合は、署名のないマクロでも実行可能です。
コンピュータに損害を与える可能性があるマクロを実行する前に警告します。 実際の動作は「損害を与える可能性」を判定するわけではなく、マクロが登録されたワークブックを開く際には必ず確認メッセージが表示されます。

(推奨しません)コンピュータに損害を与える場合があるマクロを実行する前に警告しません。ウィルス検出プログラムがインストールされているか、すべてのドキュメントが安全であると確認した場合のみ設定してください。

マクロが登録されたワークブックを開く場合でも何のメッセージも表示されず、全てのマクロが有効な状態で開かれます。

認証局発行のデジタル署名を持たない場合はこのセキュリティレベルは一般的に「中」に設定することになると思います。

「中」に設定した状態でマクロを含むワークブックを開こうとすると、
マクロを有効にするかの確認
このように「マクロを有効にするか」の確認メッセージが表示されます。
ここで「マクロを無効にする」を選択するとワークブックは開かれますがマクロは起動できない状態で開かれます。
このワークブックでマクロを利用する場合は「マクロを有効にする」を選択します。
「コンピュータに損害を与える場合があるマクロ」などと記載がありますが、この機能では実際にはマクロの内容の吟味が行なわれるわけではなく「全てのマクロ = 損害の可能性」という位置づけで扱われています。

「低」に設定した場合はこの確認メッセージは表示されず、無条件でマクロが有効の状態でワークブックが開かれます。

「高」の場合は、デジタル署名を持たないワークブックは無条件でマクロが無効の状態で開かれます。
但し、スクリプトなどの外部プログラムからExcelを起動してワークブック開く場合は「高」の状態でもマクロは有効になります。
スクリプト(VBScript)はプログラムの一種ですから作成にはそれなりの知識が必要ですが、下記のような既存のスクリプトを利用すれば作成する上での知識がなくても運用できます。

Option Explicit
'*******************************************************************************
' 週報入力ワークブックの起動(マクロ有効化)
' ※本ファイル名は、週報ブックのファイル名の後に「.vbs」を付加したものにすること
' ※本ファイルは、週報ブックと同じフォルダに保存すること
'*******************************************************************************
Dim objExcel, strPath, strFile, strScriptName
strPath = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
strScriptName = LCase(WScript.ScriptName)
If Right(strScriptName, 8) = ".xls.vbs" Then
    strFile = Replace(strScriptName, ".vbs", "")
Else
    strFile = Replace(strScriptName, ".vbs", ".xls")
End If
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.Workbooks.Open strPath & strFile
'---------------------------<< End of Source >>---------------------------------
使用方法は、枠内の「コード」をメモ帳等のテキストエディタに貼り付けて名前を付けて保存させるだけです。 この時のファイル名はマクロを有効として開きたいExcelワークブックのファイル名と同じで拡張子を「.vbs」に変更するだけです。 保存時はファイルの種類を「すべてのファイル」にして下さい。 保存先フォルダはマクロを有効として開きたいExcelワークブックと同じフォルダにします。
これで保存したスクリプトファイル(*.vbs)を実行して目的のマクロを有効として開きたいExcelワークブックが起動することを確認して下さい。
スクリプトを起動してExcelワークブックを開くということは、それ以前の通常動作とは異なります。 ここでスクリプトを作成しても、今まで通りExcelワークブックをフォルダで探してダブルクリックするという運用だとしたらここでの配慮は何にもなりません。

これらのことから、一般的にマクロを利用する(自分でマクロを作らなくてもマクロを含むワークブックを利用する)場合は、このセキュリティレベルは「中」に変更せざるを得ないと思います。 そういうことで最初は「中」に変更するわけですが、問題は時期が経ってパソコンを入れ替える場合です。 過去のことは忘れてしまって、その時になって「マクロが動かない」「いつものツールバーが表示されない」ということになります。 私のところでも、いつもこの手の問い合わせが来るわけですが、マクロを自分で作成するレベルの方でない場合は致し方ないところでしょうか。

戻る 先頭に戻る

Excel2003でのセキュリティ設定と動作

Excel2003になるとセキュリティレベルに「最高」が加わります。
Excel2003の「セキュリティ」設定画面

「セキュリティ」の設定画面は、メニューバーの「ツール」から「マクロ」→「セキュリティ」を選択すると表示されます。
ここでの「最高」「高」「中」「低」の設定によって、マクロを持つExcelワークブックを立ち上げる際に以下のように影響します。

レベル 説明 備考
最高 信頼できる場所にインストールされたマクロだけを実行することができます。その他のマクロは、署名の有無にかかわらず実行不可になります。

マクロを有効にして利用する場合はこのレベルでの運用はできません。

(デフォルト)
信頼できる作成元からの署名付きのマクロだけを実行することができます。署名のないマクロは自動的に実行不可になります。

外部スクリプト等からExcelを起動する場合は、署名のないマクロでも実行可能です。
コンピュータに損害を与える可能性があるマクロを実行する前に警告します。 実際の動作は「損害を与える可能性」を判定するわけではなく、マクロが登録されたワークブックを開く際には必ず確認メッセージが表示されます。

(推奨しません)コンピュータに損害を与える場合があるマクロを実行する前に警告しません。ウィルス検出プログラムがインストールされているか、すべてのドキュメントが安全であると確認した場合のみ設定してください。

マクロが登録されたワークブックを開く場合でも何のメッセージも表示されず、全てのマクロが有効な状態で開かれます。

「最高」というのは、つまり「私はマクロは全く扱いません」という場合に設定するものです。企業内でExcelを利用する場合は、ほんの一部でもマクロを利用するケースがあればこの設定にはできないでしょう。
それ以外は前出のExcel2002と同じです。説明は重複してしまうので上記Excel2002の説明を参照して下さい。

戻る 先頭に戻る

Excel2007でのセキュリティ設定と動作

Excel2007では「レベル」の表記がなくなりました。
Excel2007の「マクロの設定」

この「マクロの設定」を表示させるには、左上の「Officeボタン」から一番下の「Excelのオプション」をクリックし、 さらに左のメニューの「セキュリティセンター」を選んで「セキュリティセンターの設定」をクリックします。 「セキュリティセンター」が表示されたら左のメニューの「マクロの設定」を選ぶとこの画面になります。
設定内容は下記のようになります。

レベル 備考
警告を表示せずにすべてのマクロを無効にする マクロを有効にして利用する場合はこのレベルでの運用はできません。

警告を表示してすべてのマクロを無効にする(デフォルト) Excel2003のセキュリティレベルの「中」に近い設定です。マクロを含むワークブックを開くと、一旦「セキュリティ警告」が表示されますが、オプションから有効に切り替えられるモードです。

デジタル署名されたマクロを除き、すべてのマクロを無効にする

Excel2003のセキュリティレベルの「高」に近い設定です。
すべてのマクロを有効にする(推奨しません。危険なコードが実行される可能性があります)

マクロが登録されたワークブックを開く場合でも何のメッセージも表示されず、全てのマクロが有効な状態で開かれます。

このように、レベルの上下階層と表記順位は関係ない表現に変わっています。
これで判るように、デフォルトの状態でデジタル署名がないワークブックを開いてもマクロを有効にできるようになりました。
「マクロが無効にされました」
マクロを含むワークブックを開くと、このように「マクロが無効にされました」というセキュリティ警告が表示されます。 このままでもマクロ無効の状態でワークシート上の操作はできます。
マクロを有効に変える場合は警告のところにある「オプション」ボタンをクリックして、
「セキュリティ警告 - マクロ」
「セキュリティ警告 - マクロ」のダイヤログで「このコンテンツを有効にする」を選んでOKをクリックします。
つまり、事前選択ではなく、一旦開いてから有効に変更するという方法に変わったわけです。
Excel2003までのセキュリティレベル「中」に近いものなのですが、Excel2003まででは確認メッセージ上では「マクロを有効にする」がデフォルトなので そのままEnterを押すとマクロが有効になってしまいます。 慢性的にEnterを押すクセがついてしまうとセキュリティの意味がないということなのでしょうか。

このほか、セキュリティセンターでは「信頼できる場所」が登録できるようになりました。
Excel2007の「信頼できる場所」

これはフォルダ単位でマクロを有効の状態で開く機能です。
ここで登録したフォルダに保存されているワークブックを開く時は即座にマクロが有効になる状態で開かれ、セキュリティ警告は表示されなくなります。
デフォルトでは「プライベートネットワーク上にある信頼できる場所を許可する」にチェックが付いていないので、ローカルディスク上のフォルダしか機能しませんが、 ここにチェックを付ければネットワーク上のフォルダにも適用できるようになります。 但し、ネットワーク上のフォルダは他者がファイルを保存することもあるので「推奨しません」と表示されています。
Excel2003までは「マクロ = 悪者」というような扱いだったものがだいぶ方向転換したように感じます。 利用者の意見を取り入れたのかも知れません。

戻る 先頭に戻る

Excel2010以降でのセキュリティ設定と動作

Excel2010以降の「マクロの設定」はExcel2007と同じです。
Excel2010の「マクロの設定」

Excel2010以降では「Officeボタン」がなくなり、代わりにリボンのタブに「ファイル」が追加されています。 これをクリックして左下にある「オプション」をクリックします。「Excelのオプション」が表示された後はExcel2007と同様で さらに左のメニューの「セキュリティセンター」を選んで「セキュリティセンターの設定」をクリックします。 「セキュリティセンター」が表示されたら左のメニューの「マクロの設定」を選ぶとこの画面になります。
設定内容は下記のようになります。

レベル 備考
警告を表示せずにすべてのマクロを無効にする マクロを有効にして利用する場合はこのレベルでの運用はできません。

警告を表示してすべてのマクロを無効にする(デフォルト) Excel2003のセキュリティレベルの「中」に近い設定です。マクロを含むワークブックを開くと、一旦「セキュリティ警告」が表示されますが、オプションから有効に切り替えられるモードです。

デジタル署名されたマクロを除き、すべてのマクロを無効にする

Excel2003のセキュリティレベルの「高」に近い設定です。
すべてのマクロを有効にする(推奨しません。危険なコードが実行される可能性があります)

マクロが登録されたワークブックを開く場合でも何のメッセージも表示されず、全てのマクロが有効な状態で開かれます。

このデフォルトの状態で、マクロを含むワークブックを開いた時の動作はExcel2007からさらに変更されました。
セキュリティ警告
セキュリティ警告自体は同じなのですが、ここに表示されるボタンが「コンテンツの有効化」となってクリック1回だけでマクロを有効に変えることができるようになりました。

また、「信頼できる場所」についてもExcel2007と同様に登録することができる上、さらに「信頼済みドキュメント」という機能が追加されています。
これは上記のセキュリティ警告から「コンテンツの有効化」をクリックしたものをドキュメント単位に記憶して、次回開いた時にはセキュリティ警告を表示させずにマクロを有効にする機能です。
信頼済みドキュメント

この「信頼済みドキュメント」の動作についてもセキュリティセンターで設定ができます。 ネットワーク上のドキュメントでも信頼済みにするかどうかと、信頼済みドキュメントの仕組み自体を無効化させることができます。
いずれにしてもWindows自体がセキュリティソフトの利用をほぼ強制しているわけですから、Excel側のマクロについてのセキュリティのあり方が少し変わってきた(緩められてきた?)のではないでしょうか。

戻る 先頭に戻る

Excel2002以降ではVBEVBProjectを操作するマクロがエラーになる。

Excel2002(OfficeXP)には、セキュリティ機能の中に「マクロからVBプロジェクトへのアクセスを制限する機能」が実装されています。

これは「配布の問題」で説明している「VBE(VisualBasicEditor)」のマクロからの操作を拒否する機能です。デフォルトで「拒否」になっているため、マクロでマクロを書き換えるような操作をするマクロは、
実行時エラー '1004': プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます
というエラーになります。
これは「Microsoft Visual Basic for Applications Extensibility 5.3」 ライブラリを使用したり、「VBE」「VBProject」を操作するコードを実行すると発生しますので、通常、そのワークブックの起動時ではなく、実際にコードが実行された時点で発生します。
※本件は、マイクロソフトの「サポート技術情報(282033)で説明されています。
   Excel2003とExcel2007については「サポート技術情報(813969)で説明されています。


通常、VBEをマクロ上から操作する(つまりマクロでマクロを書き換える、書き込む)ことは、それなりの理由がなければあり得ないことで、悪意を持って「マクロからマクロを書き換える」などがこれに含まれることからExcel2002以降ではこれをデフォルトで「拒否」という立場を採っているのだと思います。
元々、「Microsoft Visual Basic for Applications Extensibility 5.3」のようなVBE内の操作を可能とするライブラリを提供しておきながら、マクロウィルス対策ではあるものの一方でこれを「拒否」することを「デフォルト」にしなければならない状況になってしまったことは悲しい現実だと言えます。

本サイトのVBA関連の説明にある画像をクリックして起動(又はダウンロード)するExcelワークブックには「Module1の表示(VBE)」などのボタンを用意しており、これによってVBE上にコードペインを開くようにしてありますが、これもマクロからのVBEの操作になるので、上記のエラーの対象です。

この「拒否」機能を解除するには、以下のようにします。

@
「ツール」メニューの「マクロ」を選択し、「セキュリティ」をクリックします。
「ツール」メニューの「マクロ」を選択し、「セキュリティ」をクリック
A
「セキュリティ」が開いたら、「信頼のおける発行元」タブを選択します。
「信頼のおける発行元」タブを選択
B
Visual Basic プロジェクトへのアクセスを信頼する」のチェックボックスにチェックを付けます。
「Visual Basic プロジェクトへのアクセスを信頼する」のチェックボックスにチェック
このチェックが付いていれば、上記のエラーは発生しません。
但し、Excel 2003の場合は、
「Visual Basic プロジェクトへのアクセスを信頼する」のチェックボックスが操作できない
このように「Visual Basic プロジェクトへのアクセスを信頼する」のチェックボックスがグレーになっていて操作できません。「デジタル署名」がないマクロでは一切受け付けないということのようです。
但し、これは以前のバージョンで作成したデジタル署名が残っている場合の動作のようです。
「Visual Basic プロジェクトへのアクセスを信頼する」のチェックボックス
Office 2003が単独でインストールされている場合や、旧バージョンでのデジタル署名が存在しなかった場合は、このように操作できるようです。 この状態では、「ダウンロード」「モジュール自動入れ替え機能」も動作することは確認が取れました。

Excel2007、Excel2010では、セキュリティセンターの「マクロの設定」の下方に
Excel2010の「マクロの設定」
このように「開発者向けマクロ設定」という題目で「VBAプロジェクトモデルへのアクセスを信頼する」というチェックボックスがあって同様に機能します。

Excel2000、Excel2002でしか確認していませんが、この「拒絶」機能は、デジタル署名とタイアップしているようです。
デジタル署名を付けたワークブックを開いた場合は、
デジタル署名付きのブックを開いた時のメッセージ
このようなメッセージとなります。「以下の作成者」はデジタル署名の名前です。
ここで「マクロを有効にする」を選択すると、上記のエラーは出なくなります。

※これはExcel2000での表示です。Excel2002では他のPCで作成されたデジタル署名を持つブックはセキュリティレベルを下げないと開くことはできません。(次のページで説明します。)

但し、本サイトのサンプルワークブックの立場を説明しますと、ここで「じゃあデジタル署名を付けておけばいいじゃん」にはならないのです。Excel2000以降のユーザーに限定できれば良いにですが、デジタル署名を付けてしまったワークブックは、
プロジェクトを表示できません。 型が一致しません。

のいずれかになります。
Excel97では、Excel2000以降のバージョンでデジタル署名付きで作成されたワークブックに対して、VBプロジェクトを開くことができません。マクロそのものが動かないのではありませんが、本サイトのサンプルとしてはこれでは良くないことになります。
このため、本サイトのサンプルには、デジタル署名は付けていませんので、ご了承願います。

戻る 先頭に戻る