Word の相互参照が壊れる理由と対策 (増補)

Wordの相互参照機能は、ページ物の文書作成にはとても便利な機能です。ただ、仕様的に固有のクセがあるので、利用する場合には特別に注意すべきポイントがあります。これを知らずに使うと、文書が大きく壊れるような結果になってしまうのです。

ここでは、相互参照の仕組みと、利用する場合の注意事項を説明します。

相互参照の機能と仕組み

相互参照を使うと、別の箇所のタイトルやページ番号を埋め込めます。埋め込み後に参照先の情報が変わっても更新されるので、ページ量があって内容の変更が多い文書作成には大変助かります。ハイパーリンクにできるので可用性も優れています。

網掛けはフィールドに対する目印です(印刷はされません)

参照先にブックマークが挿入され、参照元にはそのブックマークを参照するREFフィールドが挿入されるという仕組みです。ブックマークのIDは自動で設定されます。

フィールドコードを表示して中身を見てみると

WordのUIでは「参照元」「参照先」がそれぞれどちらなのか統一されていないのが混乱の元になっていたりします。このトピックでは、参照する側(REFフィールド)を参照元、参照される側(ブックマーク)を参照先 と表記します。

相互参照のトラブル要因

「相互参照が壊れる」と前述しましたが、実はデータとしては壊れてはいません。壊れたとしか見えない状態になる、というのが正確です。

ユーザーが編集した箇所(参照先)とトラブル発生箇所(参照元)が別なので、相互参照が原因と気づきにくいのも厄介です。

相互参照ブックマークの特徴

要因1: 相互参照ブックマークは段落に配置される

ブックマークが設定された段落を移動や削除すると、ブックマークも移動・削除されます。

参照先が削除されると、参照元は「エラー! 参照元が見つかりません。」というテキストに変わります。参照元も修正が必要な場面なので、ここは妥当な動作といえます。
要因2: 相互参照ブックマークは見えない

オプションの詳細設定に [ブックマークを表示する] の項目がありますが、これを有効にしても相互参照のブックマークは表示されません。

つまり、編集しようとしている段落が、別の場所からの相互参照先になっていないかを見分けることはできないのです。

要因3: 相互参照ブックマークは段落のテキスト範囲に設置される

Wordでは、段落に関する各種の情報は段落記号に含まれるのですが、ブックマークはそれとは別で先頭~末尾文字の範囲(段落記号を含まない)に設置されます。この範囲が参照元に表示されます。

問題はブックマーク範囲とカーソルの位置関係です。

トラブル発生パターン1 : 先頭に段落を追加したときに起こること

この内容で、相互参照先の段落先頭にカーソルを置き、 Enter キーで段落を増やしてみます。

前に文章を追加したい、といったときに普通に行う操作ですね。

 

段落を増やした後、相互参照元のフィールドを更新した結果です。

見出しが増えていたりして混乱しますね。Enter 一つで一体何が起こったのでしょうか。

実は、段落先頭に置いたカーソルは、ブックマーク範囲に対してこの位置になっています。

ここに段落を挿入することで起きた現象を順を追って説明します。

  1. ブックマーク範囲の中に段落記号が挿入され、ブックマークが本来1段落のはずが2段落の範囲になった
  2. 参照元には「2段落の範囲」内の「段落記号+元のテキスト」が渡されるようになった
  3. 段落記号が持つスタイルも渡され、参照元の段落に適用された(フィールド外の書式も変化した)

段落先頭に限らず、テキストの途中(ブックマーク範囲の中)で段落を挿入した場合も、同様の結果になります。

入力したのがテキストならば、「追加テキスト+元のテキスト」で参照元が正しく更新される仕組みなのですが、段落を挿入するとこの仕組みが裏目に出てしまう、というわけです。 

同じ位置に移動やコピーによって段落を挿入しても同様の結果になります。
多くの段落や表などを貼り付けた後に参照元を更新したらどうなるか…。文書が壊れたように見えても仕方がない状態になりますね。

相互参照ブックマークのある段落のコピーにも注意

以前のバージョンのWordでは、相互参照ブックマークのある段落を別の場所にコピーすると、元の場所とコピー先の2点範囲のブックマークになっていました。その結果、参照元を更新すると恐ろしい結果になったりしていました。

Microsoft 365 の Wordではコピーによる問題は解消されているようですが、旧バージョンを使用している場合はご注意ください。

このトラブルの対処方法

トラブルの相互参照箇所を右クリックし、[フィールドコードの表示/非表示]をクリックする
{ REF _Ref76139684 \h } のようなREFフィールドが現れます。

[挿入]タブの[ブックマーク]をクリックし、ブックマークダイアログボックスを表示する

[自動的に挿入されたブックマークを表示する]をチェックする
相互参照のブックマークIDがリストに現れます。

トラブル箇所と同じIDのブックマークを削除する

トラブル箇所のREFフィールドを削除し、相互参照を挿入し直す 

トラブル発生パターン2 : 末尾にテキストを追加したときに起こること

今度は、相互参照先の段落末尾(段落記号の前)にカーソルを置き、テキストを追加してみます。そのあとで相互参照フィールドを更新するとどうなってしまうでしょう?

結果は…変わらないのです。ビフォー・アフターが同じです。

実は、段落末尾に置いたカーソルは、ブックマーク範囲に対してこの位置になっています。

パターン1とは真逆で、ブックマーク範囲の外に追加テキストが挿入されてしまうのです。

つまりこちらは、入力したのが Enter (段落挿入)ならば、参照先段落が増えたりしない仕組みなのですが、テキストを挿入するとこの仕組みが裏目に出てしまう、というわけです。 

パターン1の場合のように大きく崩れることはありませんが、参照先のテキスト変更を自動反映するという相互参照の本来の機能が失われてしまっていますね。

相互参照トラブルを回避するには

段落に対して相互参照ブックマークの有無が確認できないので確実な回避策はないのですが、例えば次のような運用でリスクを軽減できます。

トラブル防止のための編集ルールを設ける

  • 相互参照で参照先にする段落スタイルを特定する(見出し 1 ~ 3 のみ など)
    該当スタイルには相互参照ブックマークがあるかもしれないという前提で操作する
  • 該当スタイルの段落末尾以外への段落挿入は禁止
  • 該当スタイルの内容の変更は末尾文字より手前を書き換えた後で不要テキストを削除する

相互参照の挿入は、できるだけ工程の後で行う

相互参照の使用箇所がわずかな場合は、相互参照機能は使わず手入力で妥協する

なにより、ここで解説した内容を理解できていれば、問題が発生しても慌てずに対処できると思います!
なお、画面に表示して確認できないブックマークですが、マクロを使ったチェックは可能です。
タイトルとURLをコピーしました