Word文書で不要なスタイルを一括削除する

文書内で使われていない段落スタイルや文字スタイルを検出して、一括削除するマクロです。

Webページなど他のソースからコピーした内容を貼り付けると、それらに含まれるスタイルもインポートされます。貼り付け後に文書内のスタイルで設定しなおしても、インポートされたスタイルは消えません。これを繰り返していくと、インポートされたスタイルにまみれて文書の本来のスタイルが埋もれてしまいます。

使用していないスタイルを検出して削除するマクロ

不要になったものの残留しているユーザー定義のスタイルをまとめて削除することを想定しています。

Public Sub 不使用スタイルを削除()

  Dim aSty As Style
  Dim sMsg As String

  For Each aSty In ActiveDocument.Styles
    ' 段落スタイルと文字スタイルを対象に
    Select Case aSty.Type
    Case wdStyleTypeParagraph, wdStyleTypeParagraphOnly, wdStyleTypeCharacter
      ' 使用実績がありビルトインスタイルでないもの
      If aSty.InUse = True And aSty.BuiltIn = False Then
        'スタイルを検索
        With ActiveDocument.Content.Find
          .ClearFormatting
          .Text = ""
          .Style = aSty
          .Execute Format:=True
          '不使用(文書内で検出されない)なら削除
          If .Found = False Then
            sMsg = sMsg & aSty.NameLocal & vbCrLf
            aSty.Delete
          End If
        End With
      End If
    End Select
  Next aSty

  If sMsg <> "" Then
    MsgBox "次の不使用スタイルを削除しました" & vbCrLf & sMsg, _
      vbInformation, "不使用スタイルの検出&削除"
  End If
  Set aSty = Nothing
End Sub

解説と補足

StyleObject.InUse = True

.InUse は紛らわしいのですが、Trueを返すのは「使用されたことがある」スタイルです。現在使用中とは限りません。また、読み取り専用プロパティなので .InUse = Falseと値を設定することもできません。

ここでは、インポートされたスタイル(InUseTrue)と、文書内のスタイルで未使用のもの(InUseFalse)とを選別しています。

StyleObject.BuiltIn = False

.BuiltInは、「標準」や「見出し x」などの組み込みスタイルを判別するものです。組み込みスタイルは削除できないので除外しています。

スタイルの検索

検索対象のスタイルは、スタイルオブジェクトで指定します。また、スタイル検索は書式の検索なので .Execute でFormat:=True を指定しています。

不使用スタイルの選択削除

残したいスタイルもある場合は、スタイル名を確認しながら一つずつ削除するようにします。

If .Found = False Then
  If MsgBox(aSty.NameLocal & "を削除しますか?", vbYesNo + vbQuestion) = vbYes Then
    sMsg = sMsg & aSty.NameLocal & vbCrLf
    aSty.Delete
  End If
End If
不使用・不要なスタイルが残っている場合

組み込みスタイルは削除できないため、このマクロの対象外です。使用予定がなく表示が邪魔な場合は、非表示に設定しましょう。

 


テンプレートと比較してスタイルを削除するマクロはこちらで紹介しています。

タイトルとURLをコピーしました