エクセル雑感
VBAが消えてしまった!マクロが壊れて動かない!

ExcelマクロVBAとエクセル関数についての私的雑感
最終更新日:2020-05-09

VBAが消えてしまった!マクロが壊れて動かない!


2020年4月15日に配信されたWindows10用セキュリティ更新プログラムの不具合で、
なんと、VBAが全て消えてしまうという事が発生しています。
今後もあり得る事なので、このような場合の対策について記しておきます。


VBAが消えてしまうとはどんな状態なのか

エクセルファイルを開くと、以下のようなメッセージが出力されます。

始めて開いたファイルか、開いたことのあるファイルかにより、メッセージが違う場合があります。

VBA マクロ VBAが消えてしまった

VBA マクロ VBAが消えてしまった

下のメッセージの場合に、「はい」を選択しても、

VBA マクロ VBAが消えてしまった

結局、どちらのメッセージで、どれを応答したとしても、VBAは消えてなくなってしまいます。

Alt + F11 でVBEを開くと、シートの一覧しか表示されず、標準モジュールが丸ごとごっそり無くなってしまっています。

※このとき、決して上書き保存してはいけません。
バックアップなしに上書き保存してしまったら、VBAを回復することはできなくなります。

ロールバックによる対処

(修正Upd リリース) 4月の更新プログラムでマクロ付きエクセルファイルが読めなくなる不具合への復旧方法の紹介

これは、問題発生する前に戻すという方法です。
4月配信の更新プログラムによる不具合は、3月時点のバージョンへ戻す事により復旧できます。
Office365(Micorsoft365)/2019/2016/2013 はロールバック、Office2010はKBのアンインストールで行ないます。

ここに記載されている通りで良いはずです。
また、同様の内容を画像付きでより詳しく解説しているページも多数ありますので参考にしてください。


全てのPCで上記を行う必要はありません。
また、アッブデートを止めているPCがあれば、それを使ってください。

そして、問題のファイルを開いてVBAの存在を確認出来たら、まずはVBA一式をエクスポートして確保しておきます。
その上で、
コンパイルを行って、問題の出るPCで開いて確認。
VBA一式を削除してインポートし直し、問題の出るPCで開いて確認。
等々、何通りか対処してみましょう。

この辺りで解決すれば良いですが、これでダメなら、とにかく問題の出るPCで開いてしまいましょう。
当然VBAは無くなりますが、シートは残っているはずですので、それで構いません。
エクスポートして確保してあるVBA一式を、インポートもしくはコピペで貼りつけるなりして回復させてください。

VBAだけを別途取り出す

ロールバックは結構面倒ですし、慣れないと何やら難しそうに感じるかもしれません。
以下は最終手段ではありますが、今回の件に限らず、VBA救出の手段として覚えておくと良いでしょう。

以下の操作は、間違った操作によるトラブル防止のため、
元のファイルをコピーし、コピーしたファイルで実行してください。

拡張子を変更する:.xlsmを.zip

以下の手順で実行してください。

1.拡張子の.xlsmを.zipに変更します。
VBA マクロ VBAが消えてしまった

VBA マクロ VBAが消えてしまった

VBA マクロ VBAが消えてしまった

「はい」で変更してください。

2..zipをエクスプローラーで開く
.zipに変更したら、そのファイルをエクスプローラーで開きます。

VBA マクロ VBAが消えてしまった

右クリックメニューの下の方に、
「プログラムから開く」→「エクスプローラー」

VBA マクロ VBAが消えてしまった

3.フォルダxlを開きます。
xlを開いてください。
以下の画像は、たまたま手持ちで発生したファイルになりますので、
細部の構成が若干違うと思いますが、気にしなくて良いです。


VBA マクロ VBAが消えてしまった

4.vbaProject.binをコピーして確保
vbaProject.binこれをコピーして、どこかへ確保してください。
これを仮に、確保VBA(vbaProject.bin)とします。

VBA マクロ VBAが消えてしまった

確保VBA(vbaProject.bin)は後ほど使用します。

5...xlsmに戻しておく
拡張子を.xlsmに戻しておきましょう。
xlsmに戻したら、エクスプローラーは閉じてください。

新規ブックを作成する

以下の手順で実行してください。

1.新規ブックを作成
2.Alt + F11 でVBEを起動
3.標準モジュールの挿入
VBA マクロ VBAが消えてしまった

4.Subの作成
sub aaa
これだけ入力してEnterで構いません。
要は何でも良いので、プロシージャーを1つ作ります。

VBA マクロ VBAが消えてしまった

5.xlsm(マクロ有効ブック)で保存
これを仮に新規xlsmとします。

新規xlsmを.zipにしてエクスプローラーで開く

続けて以下の手順を実行します。

1.新規xlsmの拡張子を.zipに変更
VBA マクロ VBAが消えてしまった

VBA マクロ VBAが消えてしまった

2.右クリックからエクスプローラーで開く
VBA マクロ VBAが消えてしまった

3.フォルダxlを開きます。
xlを開いてください。

VBA マクロ VBAが消えてしまった

4.確保VBA(vbaProject.bin)で置換
vbaProject.binを、確保VBA(vbaProject.bin)で置き換えてください。

5..xlsmに戻す
拡張子を.xlsmに戻してください。
xlsmに戻したら、エクスプローラーは閉じてください。

新規xlsmを開いてVBAを取り出す

新規xlsmを開いてみましょう。

VBA マクロ VBAが消えてしまった

標準モジュールが追加されているのが確認できるはずです。
さらに、元々作成した新規ブックはSheet1だけだったはずですが、シートモジュールまで増えているのも確認できます。
後は、エクスポートして元のファイルでインポートするなり、コードをコピペするなりして回復させてください。



同じテーマ「エクセル雑感」の記事

「ポケモンを確実に見つける方法」をExcelで数学してみた
エクセルで「もういくつ寝るとお正月」
エクセルで連立方程式を解く(MINVERSE,MMULT)
VBAが消えてしまった!マクロが壊れて動かない!
エクセル関連ツイート
エクセル関連ツイートNo2
エクセル関連ツイートNo3
エクセル関連ツイートNo4
エクセル関連ツイートNo5
「VBAによる解析シリーズその2 カッコ」をやってみた
ツイッターで出されたVBAのお題をやってみた


新着記事NEW ・・・新着記事一覧を見る

多階層フォルダ(ディレクトリ)の作成|VBAサンプル集(7月31日)
VBAのインデントについて|VBA技術解説(7月16日)
「VBA Match関数の限界」についての誤解|エクセル雑感(7月15日)
省略可能なVariant引数の参照不可をラップ関数で利用|VBA技術解説(7月12日)
100桁の正の整数値の足し算|エクセル雑感(7月9日)
LSetとユーザー定義型のコピー(100桁の足し算)|VBA技術解説(7月9日)
Variant仮引数のByRefとByValの挙動違い|エクセル雑感(7月5日)
Variant仮引数にRange.Valueを配列で渡す方法|エクセル雑感(7月5日)
Variantの数値型と文字列型の比較|エクセル雑感(7月1日)
VBAのVariant型について|VBA技術解説(6月30日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ