Excelのトラブル
私は普段Microsoft365を使用していて、複数のExcelファイルをSharePoint上のフォルダにまとめて管理しています。
ところがこのExcelファイルがしょっちゅう「破損」して開けなくなります。
具体的なエラー表示はこちら。

'ファイル名.xlsm'の一部に問題が見つかりました。可能な限り内容を回復しますか? ブックの発行元が信頼できる場合は、[はい]をクリックしてください。
当然「はい」を押します。すると修復ファイルが立ち上がる。そちらは問題ないのですが、SharePoint上にあるファイルが修復されるわけでなく、別個に修復ファイルがデスクトップに立ち上がるので、その後の対処が面倒になります。
- SharePoint上のファイルを削除
- 代わりに修復ファイルをSharePoint上にアップ
しかもこの時、修復ファイルが破損した元のファイルと同じファイル名だったりすると、なぜか修復ファイルもアップした瞬間に破損扱いになってしまいます。だから破損した元のファイルが「◯◯.xlsm」なら、ちょっとだけファイル名を変えて「◯◯_.xlsm」等にしないと、うまく差し替えできません。
原因究明
あまりにも頻繁にこの破損が起きるので、原因について調べてみました。
ブックを修復すると、破損の原因についてこんなメッセージが表示されます。

修復されたレコード: /xl/sharedStrings.xml パーツ内の文字列プロパティ (文字列)
これだけでは意味がわからないので、エラーメッセージをさらに検索してみると、こんな記事を見つけました。

なるほど。どうやら、文字を入力した際のフリガナの情報が、破損の原因になっているようです。
私自身も記事中の「エクセルファイルをXML化」を試して、修復前と修復後のXMLを見比べてみました。するとやはり修復前の破損ファイルにはフリガナの情報が入っていました。Excelファイルをそのまま見ただけでは、フリガナなんて入っていないように見えますが、どうやら「見えない情報」として文字データの中に組み込まれているようなのです。ややこしい…😥
対策? 解決策?
破損するたびに、SharePoint上でいちいちファイルの削除→差し替えが面倒だったので、当初はこの破損をSharePoint上で修復する方法ばかり調べたり、考えていました。
けれどどうやら、一度破損すると、差し替え以外に手段はなさそうなのです。
なので、修復は諦めました。代わりに破損を予防する方法はないか、考えるようになりました。
Excel内部の文字に内蔵されたフリガナが、破損の原因としましょう。
ならば、あらかじめシート上のフリガナ情報を全部削除しておけば、破損は防げるのではないか。
そんな仮説をベースにして、このようなVBAを作りました。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
Dim cell As Range
' すべてのワークシートをループ
For Each ws In ThisWorkbook.Worksheets
' すべてのセルをループ
For Each cell In ws.UsedRange
If cell.Phonetics.Count > 0 Then
cell.Phonetics.Delete
End If
Next cell
Next ws
End Sub
このVBAをThisWorkbookにセットします。

すると、Excelファイルを閉じるたびに、全てのセルからフリガナ情報を削除してくれます。
結果、頻繁に起きていた破損はなくなりました。
ダメ元で「おまじない」としてなら…。
ただ、これを「解決策」と言ってしまうのは、正直おこがましいかもしれません。
はたして本当に効果があったのか、なかったのか、ちゃんとした検証ができていないので。
- ファイル破損の原因は本当にフリガナだったのか?
- そのフリガナを全部削除すれば、破損は防げるのか?
わからないなりに、仮説の上に仮説を重ねて打った対策です。
いまだにこれがちゃんと効いているのか、それで破損を防げているのか、いまいち確証がもてない状態です。
それでも困っているから試してみたい、という方は、上記の事情もご理解・ご了承の上、自己責任でお試しください。
「解決策」「対処法」というよりは、ダメ元で「おまじない」をかけるような気持ちで。
皆さまにこの「おまじない」が効くことを、私もお祈り申し上げます🙏

コメント