文章の変更箇所を明確にする

ワードには文章を比較し前後の文章で変更箇所がわかるような機能があります。Office2016だと校閲タブの比較のメニューからです。最初は見慣れないせいか見にくいとかわかりにくいとか不満はあるようですが、前後の文章の差分を把握するには、個人的にこれで十分だとは思っています。ただ、変更前後の文章は変更履歴がすべて承認され、最終版としての比較となるため、変更の指示に対してどのような修正がされたかを知りたい場合にちょっと不便な点があります。文章の変更履歴は保持しつつ前後の文章を比較する機能を実装した例を紹介したいと思います。

変更履歴が残らない項目

変更履歴が記録されない項目は以下の通りです。

列の削除/挿入(列の挿入自体は記録されませんが、表の書式が変更になったとして記録されます)セルの結合/分割オートシェープの削除/移動(ただし本文中に直接挿入しているものは記録される)

・・・諦めます。

2種衣類の比較方法

WordVBAの機能として、Applicationオブジェクトの比較機能と、Documentオブジェクトの比較があります。特徴として、Applicationオブジェクトのものは細かなオプションを設定できますが、Documentオブジェクトのものはあまり細かなオプションの設定はできないようです。

Applicationオブジェクトの機能

基本的な書式は以下の通りとなります。元になるものと対象になるもののDocumentオブジェクトを渡してあげます。比較元と比較対象は必須で指定する必要があります。

Sub Macro1()
  Dim moto As Document, saki As Document
  Set moto = ActiveDocument
  Set saki = Documents.Open(ファイスパス)
  Application.CompareDocuments moto, saki
End Sub

名前

データ型(既定値)

備考

Destination

WdCompareDestination

(wdCompareDestinationNew)

比較結果の表示方法を指定する。

wdCompareDestinationOriginal(0)=比較結果をもとの文章に表示させます。

wdCompareDestinationRevised(1)=比較結果を比較対象の文章に表示させる

wdCompareDestinationNew(2)=比較結果を新しいファイルに書き出します。

Granularity

WdGranularity

(wdGranularityWordLevel)

文章の一部文字に差異があった時に、文字をハイライトするか、文章全体をハイライトするかを指定する。

wdGranularityCharLevel(0):=文字レベルでハイライト

wdGranularityWordLevel(1)=文章レベルでハイライト

CompareFormatting

Boolean

(True)

書式を比較する

CompareCaseChanges

Boolean

(True)

大文字と小文字を区別して比較するかを指定する

CompareWhitespace

Boolean

(True)

段落やスペース等の違いを比較する

CompareTables

Boolean

(True)

表の中のデータを比較する

CompareHeaders

Boolean

(True)

ヘッダーとフッターを比較する

CompareFootnotes

Boolean

(True)

脚注と文末脚注を比較する

CompareTextboxes

Boolean

(True)

テキストボックス内のデータを比較する

CompareFields

Boolean

(True)

フィールドを比較するかどうかを指定する

CompareComments

Boolean

(True)

コメントを比較するかどうかを指定する

RevisedAuthor

String

比較結果を作成するときに、その差分を明記する作成者の名前を指定する

IgnoreAllComparisonWarnings

Boolean

比較処理を実行するときに、警告を無視するかどうを指定する