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

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

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

相互参照の機能と仕組み

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

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

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

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

ブックマークが設置された段落を削除するとブックマークも削除されます。カット&ペーストするとブックマークも移動します。コピー&ペーストの場合はブックマークはコピーされません。
参照先ブックマークが失われると、参照元は「エラー! 参照元が見つかりません。」のテキストに変わります。修正が必要な状態なので、このエラーは妥当な動作といえます。
WordのUIでは「参照元」「参照先」がそれぞれどちらなのか統一されていないのが混乱の元になっていたりします。このトピックでは、参照する側(REFフィールド)を参照元、参照される側(ブックマーク)を参照先 と表記します。

相互参照のトラブル要因

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

トラブルは、ブックマークの設置箇所でユーザーの編集時に発生し、相互参照の挿入箇所でフィールドの更新時に出現します。発生と出現の場所やタイミングが異なるので、因果関係に気づきにくいのが厄介です。

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

要因①: 文書上では見えない!

ユーザーが設置するブックマークとは別種の、特殊な隠しブックマークが設置されます。オプションの詳細設定の [ブックマークを表示する] を有効にしても、隠しブックマークは表示されません。

つまり、編集する箇所に相互参照ブックマークが設置されていないか(参照先になっていないか)、編集の結果にブックマーク範囲が不正になっていないかをその場で確認できないのです。

要因②: 1段落のテキスト範囲(段落記号を含まない)に設置される

ブックマークは複数段落の範囲にも設置できるのですが、相互参照ブックマークが設置されるのは1段落の段落記号を含まない範囲です。これで、段落テキストのみ(段落の書式などを除外した情報)が渡されます。

編集によってこの状態が壊れると、相互参照が正しく機能しなくなるのです。


問題は、テキストを編集するときのブックマーク範囲とカーソルの位置関係です。

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

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

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

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

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

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

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

  1. ブックマーク範囲内に段落記号が挿入され、相互参照ブックマークは本来1段落のはずが2段落の範囲になった
  2. REFフィールドには「追加の段落記号+元のテキスト」が渡されるようになり、段落が分断された
  3. 渡された段落記号が持つ段落スタイルが、REFフィールド前の段落全体に適用された

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

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

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

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

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

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

このトラブルの対処方法

原因箇所がわからなくなってから問題に気づいた場合は、次の手順でリカバリーできます。

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

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

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

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

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

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

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

結果は…変わらないのです。ビフォー・アフターが同じです。パターン1のように大きく崩れることはありませんが、参照先のテキスト変更を自動反映するという相互参照の本来の用途が機能していません。

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

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

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

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

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

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

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

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

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

 


なお、画面に表示して確認できないブックマークですが、マクロを使ったチェックは可能です。

または、見えないブックマークを見える化してしまう、という対策もできます。

 

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