仕事柄、マイクロソフトのExcelからは逃げられません。もう呪いですよここまで来ると。
  
  サーバーに置かれた誰が作ったかも判らないエクセルファイルを使っていろいろデータのやりとりを日々行っているわけですが、いろんな部署から不特定多数のアクセスがあると、知らない間にいろいろと汚染されていることがあります。
  
  例えばスタイル。恐ろしい数のスタイルがいつの間にか設定されており、ファイルサイズが膨れ上がったり、旧ファイル形式では書式の破壊を引き起こしたり。
  これはマイクロソフトの公式でも「スタイル削除のVBA」を公開するほどの公認不具合ですが、どういうわけかこれでは消せない、手動で削除しても消せない完全なるゴミスタイルがあったりして気分が悪いです。
  ゴミスタイルの名前に特定地域の地名が入ってたりすることから該当支店がなにかやらかしてるんだと思うんですが、イタチごっこになっていて手がつけられません。タチの悪いことに、これらのゴミスタイルはセルのコピーやシートのコピーを機会に別ファイルに乗り移ったりします。
  
  そしてもう一つ、外部参照の残骸です。
  どうしても消えない、どこに設定されているか判らないリンクが悩みの種でした。
  Google先生などで訊いてみても、出てくるのは「リンクの編集で参照元を変更する」とか「名前に設定されている場合は名前の管理から消す」とか「条件付き書式に設定されている場合は〜」「オブジェクトに設定されている場合は~」とか。
  全部確認しました、シートのどこにも、オブジェクトのどこにも、名前にも条件付き書式にも該当のリンクは見つかりません。リンクの解除も受け付けない、これは一体どうすればいいのか。
  
  意外なところに手段が転がっていました。
  実はExcelのファイル形式、.xlsxや.xlsmはzipファイルなんですって。へー。
  
  ものは試しに拡張子をzipに変えてみると……おお、確かに内部データが見えます。
  「xl」フォルダの中身を見ていくと、さらにいくつかのデータとフォルダが。その中に「externalLinks」というフォルダを開くと、「externalLink1.xml」のファイルと「_rels」というフォルダが。そのフォルダの中には「externalLink1.xml.rels」というファイルが。
  ファイルを開いてみると……消せなかったゴミリンクがバッチリ記載されているではありませんか。
  これらのファイルを削除すると、なぜかexternalLinksのフォルダ自体が消えました。拡張子を元に戻し、ファイルを開くと、参照できない値が云々と言われてファイルの修復が始まりました。修復が終わると……バッチリリンク消えてますね。
  
  もう一つ、スタイルの件。xlフォルダの配下に「styles.xml」というファイルがありました。その中をみると、ゴミスタイルがバッチリ見えています。
  zipファイルの中身を直接編集はできないので、一旦デスクトップ等に「styles.xml」をコピー。これをテキストエディタで開くと、随分見辛いですが「<csllStyles count="(数字)">」から始まって「</cellStyles>」で終わるタグ? の中に「<cellStyle name=」で始まる無数のスタイルがあります。これを削除……ただし、全て削除してしまうとファイル内の書式が破壊されてしまう事象を確認したので、どれか最低一つは残す必要があるようです。デフォルトのスタイル<cellStyle name="Followed Hyperlink" xfId="1"/>と<cellStyle name="Hyperlink" xfId="2"/>を残すのがお勧めでしょうか? ついでに<csllStyles count="(数字)">の数字のところも2に変更。

※訂正追記 残すのはxfId="0"の"標準"だけで良さそうです。
  ファイルをzipに戻して拡張子を元に戻してファイルを開くと、今まで消せなかったゴミスタイルが消えていました。
  このファイルを上書き保存して、再度zip化してstyles.xmlを確認すると、先ほどのcountは3に修正され、新たに標準というスタイルが作られていました。
  
  方法としてはものすごい邪道だと思うんですが、もし同様の悩みを抱えている方がいたら「自己責任において」試してみてはいかがでしょうか。下手すりゃファイルが壊れる方法なので、当然バックアップを取ってから。

 

追記:
外に引っ張り出してきたstyle.xmlから余分なスタイルを削除するコードです。
ダイアログからstyle.xmlを選択すればOK……ただし、「標準」のスタイルが残っていないと書き込みを行いません(スタイル全削除になってファイルが壊れるからです)。
しつこいようですが、バックアップは確実に取ってから実行してください。

Sub style_xml編集()

  Dim fName As String
  Dim i As Long
  Dim Buf As String
  Dim Style
  Dim Tmp
  Dim e As Boolean
  
  fName = Application.GetOpenFilename("スタイル,*.xml")
  If fName = "False" Then End
  
  With CreateObject("ADODB.Stream")
    
    .Charset = "UTF-8"
    .Open
    .LoadFromFile fName
    Buf = .readtext
    .Close
  
  End With
  
  Style = Split(Buf, vbCrLf)
    
  Tmp = Split(Style(1), ">")
  
  Style(1) = ""
  
  For i = 0 To UBound(Tmp) - 1
  
    If Left(Tmp(i), 16) = "<cellStyle name=" Then
      
      If InStr(Tmp(i), "<cellStyle name=""標準"" xfId=""0""") > 0 Then
    
        Style(1) = Style(1) & Tmp(i) & ">"
        e = True
    
      End If
      
    Else
    
      Style(1) = Style(1) & Tmp(i) & ">"
  
    End If
    
  Next i
  
  If e = False Then
  
    MsgBox "標準 xfId=""0""のスタイルが見つかりませんでした。処理を中止します"
    End
    
  End If
  
  With CreateObject("ADODB.Stream")
    
    .Charset = "UTF-8"
    .Open
    .writetext Style(0), 1
    .writetext Style(1), 0
    .savetofile fName, 2
    .Close
  
  End With

End Sub