ジェームズは、相互参照のためにドキュメント内のアイテムをブックマークしています。編集の過程で、以前にブックマークしたものを削除する必要がある場合があります。ジェームズは、削除しようとしているテキスト(およびブックマーク)への相互参照があるかどうかを確認する方法があるかどうか疑問に思います。

このタスクをたまに実行する必要がある場合は、手動で実行できます。ただし、どのようにアプローチするかは、相互参照をどのように作成したかによって異なります。相互参照を挿入すると、Wordに[相互参照]ダイアログボックスが表示されます。 (図1を参照)

image

図1.相互参照ダイアログボックス。

ダイアログボックスで、[参照タイプ]ドロップダウンリストを使用して、作成する相互参照のタイプを選択できます。各タイプの参照は、REFフィールドのさまざまなバリエーションを利用して、実際の相互参照を挿入します。たとえば、ブックマークへの相互参照を挿入すると、挿入されるフィールドは次のようになります。

{ REF MyBookmark \h }

「MyBookmark」の部分は、相互参照しているブックマーク名です。

パラメータ(この場合は\ h)は、[相互参照]ダイアログボックスの[参照先の挿入]ドロップダウンリストによって制御されます。代わりに、ドキュメントの見出しへの相互参照を挿入すると、次のようになります。

{ REF _Ref47603047 \h }

このフィールドコードの「_Ref47603047」の部分は、システムで生成されたブックマークであり、非表示になっています。相互参照用に選択した見出しを指します。 [ブックマーク]ダイアログボックスを表示し、ダイアログボックスの下部にある[非表示のブックマーク]チェックボックスをクリックすると、これらの非表示のブックマークを確認できます。

このヒントでは、Jamesがブックマークされたテキストへの相互参照を見つけるように特に要求したので、相互参照を作成したときに、[参照の挿入先]ドロップダウンリストで[ブックマーク]を選択して作成したと想定します。 -参照ダイアログボックス。これにより、ブックマークがどこかで相互参照されているかどうかを見つけるのも少し簡単になります。

削除を検討しているテキストにあるブックマークの名前を把握することから始めます。この例では、MyBookmarkなどの名前であると想定します。 Alt + F9を押すだけで、Wordはフィールドコードの結果ではなく、ドキュメント内のフィールドコードを表示します。この時点で、ブックマーク名(この場合はMyBookmark)を検索するだけで、任意のREFフィールドを見つけることができます(REFフィールドは相互参照に使用されることに注意してください)

ブックマーク名が含まれています。ブックマーク名が見つからない場合、そのブックマークへの相互参照はなく、テキストとそれに含まれるブックマークを安全に削除できます。すべて完了したら、Alt + F9をもう一度押して、フィールドコードの表示をオフにします。

ブックマークがたまに複数回参照されているかどうかを確認する必要がある場合、または検索と置換が提供するものよりも完全な検索を実行する場合は、マクロの使用を検討する必要があります。この状況では、次の4つのマクロのセットが役立ちます。

Sub IsBookmarkReferenced()

Dim aStory As Range     Dim aShape As Shape     Dim aField As Field     Dim bkName As String     Dim bReffed As Boolean

bReffed = False     If Selection.Bookmarks.Count > 0 Then         bkName = Selection.Bookmarks(1).Name         For Each aStory In ActiveDocument.StoryRanges             If TestForBookmark(aStory, bkName) Then                 bReffed = True             Else                 Select Case aStory.StoryType                     Case wdMainTextStory, wdEvenPagesHeaderStory, _                       wdPrimaryHeaderStory, wdEvenPagesFooterStory, _                       wdPrimaryFooterStory, wdFirstPageHeaderStory, _                       wdFirstPageFooterStory                         For Each aShape In aStory.ShapeRange                             If aShape.TextFrame.HasText Then                                 If TestForBookmark(aShape.TextFrame.TextRange, bkName) Then bReffed = True                             End If                         Next                     End Select                 Next aStory             Endif         Next aStory         sTemp = "Bookmark " & bkName & " is "

If Not bReffed Then sTemp = sTemp & "NOT "

sTemp = sTemp & "referenced in the document."

Else         sTemp = "There is no bookmark in the selected text."

End If     MsgBox sTemp End Sub
Function TestForBookmark(tRange As Range, bkName As String) As Boolean     Dim aField As Field

TestForBookmark = True     For Each aField In tRange.Fields         Select Case aField.Type             Case wdFieldRef, wdFieldAsk, wdFieldBarCode, _               wdFieldGoToButton, wdFieldHyperlink, _               wdFieldNoteRef, wdFieldPageRef, wdFieldSet                 If BookRef(aField.Code.Text, aField.Type) = bkName Then Exit Function             Case wdFieldTOC, wdFieldTOA                 If TOCRef(aField.Code.Text) = bkName Then Exit Function         End Select     Next aField     TestForBookmark = False End Function
Function BookRef(str As String, typeCode As Long) As String     Dim s As String     Dim i As Long

s = Trim(str)

If s <> "" Then         i = InStr(s, " ")

If i > 0 Then s = Trim(Mid(s, i))

If typeCode = wdFieldHyperlink Then             If InStr(s, "\l") > 0 Then                 s = Mid(s, InStr(s, """") + 1)

i = InStr(s, """")

If i > 1 Then s = Left(s, i - 1)

Else                 s = ""

End If         Else             i = InStr(s, " ")

If i > 0 Then s = Trim(Left(s, i))

End If     End If     BookRef = s End Function
Function TOCRef(str As String) As String     Dim s As String     Dim i As Long

s = Trim(str)

i = InStr(s, "\b")

If i = 0 Then         TOCRef = ""

Exit Function     End If     s = Trim(Mid(s, i + 2))

i = InStr(s, " ")

If i > 0 Then s = Left(s, i - 1)

TOCRef = s End Function

マクロを使用するには、削除を検討しているテキストを選択してから、IsBookmarkReferencedマクロを実行するだけです。

次に、他の3つの関数を利用して、選択したテキスト内のブックマークが他の場所で参照されているかどうかを判断します。マクロは、メインドキュメント自体だけでなく、ヘッダー、フッター、およびテキストボックスのフィールドもチェックします。

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(7619)は、Microsoft Word 2007、2010、2013、2016、2019、およびOffice365のWordに適用されます。