適材適所

PowerShellやVBAなどプログラミング系の話多めで

Excelでブックに問題が発生してしまうのはなぜか【原因はわかりません】

f:id:shinmai_papa:20210304133056p:plain

Excelで作業していると、たまにExcelに問題が見つかりました

という表示が出て、正常に開けなくなることがあります。

長く引き継がれてきたExcelや、時間をかけて作ったExcelで

これが発生すると心を真っ二つにおられてしまいます。

Excelで大事なデータを保存するのはやめておけばいいですが、

やっぱり取り回しの良さから、簡単なデータだとExcelに保存しておきたくなってしまうんですよね。

破損したものを修復すると

破損したExcelも、運がよければある程度復活させることができます。

破損したブックを修復すると、大体こんな感じになっています。 ・シート内の値は助かっている。 ・VBAの標準モジュールは助かっている ・ワークシートレベルのモジュールのVBAは消えている。 ・罫線が消えている。 ・フィルターが消えている。 ・セル幅が初期化されている。 ・シートの色付けが削除されている。

他にもあるかもしれませんが、私が気が付く限りでは、このようになっています。

シート内の値が助かっていれば大抵なんとなかるのですが、

VBAが消えていると、げんなりしますね。

その度に、よし、Excelを卒業しよう!!と思いますが

未だに卒業できません。

どうして問題が発生してしまうのか⇒わからない

私の経験上、VBAで処理しているブックでこれが起こりやすい気がしています。

やはりVBAの処理がまずいのでしょうか。

色々ググっていると同じように問題が発生してしまうという話は出てきますが、

イマイチ何が原因なのかわかりません。

関数が原因?→関数をなくしても再現してしまう。

条件付き書式が原因?→使わないように改造しても再現してしまう。

思い当たるところは見直してみましたが、一向に改善しません。

やはりVBAかも知れない、というところまで来ました。

PCに処理を渡さないことが原因?

どうして破損するのか、ググっていると知恵袋に面白い回答がありました。

・VBAのループ処理中にOS側に処理を引き渡さない。 ・同様に何回も大きなデータサイズのコピーや貼り付けを繰り返す。 (図や多量のセルデータ) (DoEventsを入れるか、処理を見直す。) ・保存や読み込みのあとにも処理を続けるときに、OSに時間を与えないままになっている。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1347208153?__ysp=ZXhjZWwg56C05pCNIGRvZXZlbnRz

この回答を見ると、OSへ処理を引き渡さないと生じるのではないか?

という仮説が浮かび上がってきます。

確かに私のよく壊れるExcelもVBAでずっと処理をしてしまい、

OSへ処理を引き渡していませんでした。

そうとわかればということで、処理の要所要所で、

Doevents関数を呼び出すようにしてみました。

まだ1週間ほどですが、確かに問題が発生しなくなりました。

よく問題が起こる私のExcelについては原因は、

ほぼOSへ処理を引き渡さないことだったと思われます。

(状況に変化がありましたら、追記します)

2021/3/19追記 やはり壊れる現象が再発しました・・・。

何が悪いのでしょうか。

早くウェブシステムに移行しましょう。

(追記終わり)

終わりに

とっても便利なExcelですが、やはり不安定なところもあります。

今回、私のケースではVBAが原因と思われるということで私の中で決着しましたが、

問題が発生する原因はケースバイケースかと思われます。

一番の願いは、Excelが安定してくれることですが、

それはなかなか難しそうです。

完全に信頼し切るのではなく、バックアップ等をこまめに残すなど、

自衛手段を持ちつつ、使っていくことが大事ですね。