2017 年 3 月のセキュリティ更新プログラム MS17-014 (KB3178690) を適用後、Excel 2010 でクラッシュやハングが発生する
Office 開発 サポート チームの中村です。
2017 年 3 月 15 日 (水) (日本時間) に公開された更新プログラム MS17-014 (KB3178690) を適用後、Excel 2010 で特定の操作を行うと Excel がクラッシュしたり、応答なしになる現象についてご案内します。
対象の更新プログラム
タイトル : MS17-014: Description of the security update for Excel 2010: March 14, 2017
アドレス : https://support.microsoft.com/ja-jp/help/3178690
2017/3/21 Update
- 1. 現象 の発生シナリオ b. の詳細と再現手順の例を記載しました。
- 3. 状況 に現在の状況を記載しました。
- 4-4. 回避策 を追記しました。
- 5. 関連情報 としてOffice.com の本現象についての情報へのリンクを追記しました。
2017/3/28 Update
3/29 に更新プログラムの公開を予定しています。3. 状況 を更新しました。
2017/3/29 Update
更新プログラムを公開しましたので、3. 状況 に詳細を追記しました。
1. 現象
KB3178690 の適用前は正常に動作していたプログラムや手動操作を行ったとき、KB3178690 を適用した Excel 2010 環境で、Excel がクラッシュしたり、応答なしになる現象が報告されています。本現象は、手動操作および VBA などのプログラムからの操作で発生します。
詳細な発生シナリオは現在確認を進めていますが、現時点で以下のようなシナリオで発生することが報告されています。
a. 他のシートやブックなどの外部参照を行う数式で参照エラー (#REF!) が発生しているセルが存在する状態で、再計算、または数式の再設定を行う
再現手順の例
1. 新規ブックを作成します。
2. [Sheet1] シートの A1 セルに、“=Sheet2!B1“ と入力し、[Sheet2] シートの B1 セルを参照する数式を設定します。
3. [Sheet2] シートの B 列を選択し、右クリックして [削除] を選択します。
4. [Sheet1] シートに戻り、数式が “#REF!” となっていることを確認します。
5. [Sheet1] シートの A1 セルに、再度 “=Sheet2!B1“ と入力します。
結果 : Excel がクラッシュします。
再現する VBA コードの例
Sub Sample()
Sheet1.Range("A1").Formula = "=Sheet2!B1"
Sheet2.Columns("B:B").Delete 'ここで A1 セルの数式が #REF! になります
Sheet1.Range("A1").Formula = "=Sheet2!B1" 'ここでエラーが発生します
End Sub
結果 : Excel が応答なしになります。
2017/3/21 Update
b. 他のシートやブックなどの外部参照を行う数式があるとき、参照先シートの セル / 列 / 行 の追加や削除を行ったあと、数式が入力されたセルを削除する
再現手順の例
1. [Sheet1] シートの A1 セルに、”=Sheet2!B1" と入力し、[Sheet2] シートの B1 セルを参照する数式を設定します。
2. [Sheet2] シートの任意の場所に、行 / 列 / セルのいずれかを挿入します。
3. [Sheet1] シート の A1 セルを削除します。
結果 : Excel がクラッシュします。
2. 発生するバージョン
Excel 2010 での発生が報告されています。Excel 2013 および Excel 2016 での発生は報告されていません。
2017/3/29 Update
3. 状況 (解決方法)
以下の更新プログラムで本問題の修正を行いました。
タイトル : March 28, 2017, update for Excel 2010 (KB3191855)
アドレス : https://support.microsoft.com/en-us/help/3191855
この更新プログラムは、Windows Update で重要な更新プログラムとして検出され、自動更新の対象となる Public Update です。Windows Update からインストールするか、上記のリンク先の "How to download and install the update" に記載のダウンロードセンターのリンクよりインストール パッケージを入手してインストールしてください。
補足
この更新プログラムには、MS17-014 (KB3178690) で更新されたセキュリティ更新を含みます。KB3178690 を適用していないユーザーも、今回の KB3191855 のみを適用することでセキュリティ更新が適用されます。
4. 回避策
発生シナリオに依存しますが、以下のいずれかの方法で回避できる場合があります。現象発生シナリオによっては回避できない場合がありますので、可能であれば、全ての回避策をお試しください。
4-1. ブックを保存して開き直す
参照エラーが発生している数式が存在する場合も、いったんブックを保存して開き直すと現象が回避できる場合があります。
数式を再設定したり、再計算を行う前にブックを保存していったん閉じ、開き直してから数式の再設定や再計算を行います。
4-2. ブックを手動計算に変更する
Excel が内部的に数式の計算を行う過程で現象が発生するシナリオを確認しています。このため、ブックの再計算が不要な場合は、ブックを手動計算にします。
設定方法
計算を手動に変更したいファイルを開き、リボンの [数式] タブ – [計算方法の設定] メニューで、[手動] を選択します。その後、ファイルを上書き保存します。
※ 注意
セルの値を変更しても、数式が自動的に再計算されません。通常は [再計算] メニュー (F9 キー) を実行して再計算を行うことで最新の計算結果が反映されますが、これを行うと今回の現象が発生します。
プログラムから動的に手動計算に設定する場合は、以下のプロパティに xlCalculationManual を設定します。
タイトル : Application.Calculation プロパティ (Excel)
アドレス : https://msdn.microsoft.com/ja-jp/library/office/ff821260.aspx
※ この設定は、現在のアプリケーション プロセス全体に影響します。
4-3. ブックを手動計算に変更した上で、依存関係をチェックして再計算する
4-2. の方法では、ブックが再計算されないため問題があるといった場合には、4-2. の手順で手動計算に変更した上で、依存関係をチェックして再計算するコマンドを実行することで現象が回避できる場合があります。
この「依存関係をチェックして再計算する」コマンドを手動で実行する場合は、Ctrl + Alt + Shift + F9 ショートカット キーを実行します。
参考)
タイトル : Windows 用 Excel キーボード ショートカットとファンクション キー
アドレス : https://support.office.com/ja-jp/article/1798d9d5-842a-42b8-9c99-9b7213f0040f
プログラムから実行する場合は、以下のメソッドを実行します。
タイトル : Application.CalculateFullRebuild メソッド (Excel)
アドレス : https://msdn.microsoft.com/ja-jp/library/office/ff822609.aspx
(例)
VBA で、一時的に計算モードを手動にして CalculateFullRebuild を行った上で計算モードを自動に戻す場合は以下のようになります。
Sub Sample()
Sheet1.Range("A1").Formula = "=Sheet2!B1"
Sheet2.Columns("B:B").Delete
'回避コード
Application.Calculation = xlCalculationManual
Application.CalculateFullRebuild
Sheet1.Range("A1").Formula = "=Sheet2!B1"
'計算モードを自動に戻します
Application.Calculation = xlCalculationAutomatic
End Sub
2017/3/21 Update
4-4. シート再計算を行う
b.の再現シナリオで有効なことを確認した回避策となります。
数式の参照先シートのセルを追加または削除した後、数式が設定されたシートについて、シート再計算 (Shift + F9) を行ってから、数式が設定されたセルを削除すると現象が回避できる場合があります。
例えば、再現手順の例にこの回避策を追加すると、以下のような手順となります。
1. [Sheet1] シートの A1 セルに、”=Sheet2!B1" と入力し、[Sheet2] シートの B1 セルを参照する数式を設定します。
2. [Sheet2] シートの任意の場所に、行 / 列 / セルのいずれかを挿入します。
3. [Sheet1] シートを選択してアクティブにし、[数式] タブ – [計算方法] セクション – [シート再計算] (Shift + F9) を実行します。 ※ 回避手順
4. [Sheet1] シート の A1 セルを削除します。
2017/3/21 Update
5. 関連資料
タイトル : After installing KB3178690 in Excel 2010, calculation may result in a hang or crash
アドレス : https://support.office.com/en-US/article/14cd3b5c-aa2a-4fba-ba0a-414dedeb3ba0
※ 今回の現象について上記リンク先 Office.com にも情報を掲載しています。
今回の投稿は以上です。
本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。