結論:Excelでリンク先が勝手に変わったように見えるときは、最初に「クリックして開くハイパーリンク」と「別ブックの値を読むWorkbook Link」を区別します。ハイパーリンクでパスを省略すると、既定では現在のブック位置を基準にした相対パスとして扱われ、ブックやリンク先を移動すると参照先が変わります。「File > Info > Properties > Advanced Properties > Summary > Hyperlink base」に値がある場合は、その基準パスも確認します。個別リンクはCtrl+K、HYPERLINK関数は数式バー、外部ブック参照は「Data > Queries and Connections > Workbook Links」から修正します。変更前に必ずコピーを作り、一括VBAは対象となる古いパスの先頭が完全一致したリンクだけを置換してください。 最新の画面名や提供条件は更新で変わるため、以下の順番で確認してください。
最初に確認するポイント
| 症状・条件 | 主な原因 | 最初の確認 |
|---|---|---|
| ブックを別フォルダーへ移動した後、クリックすると違うファイルまたは存在しない場所が開く | パスが省略されたハイパーリンクは、既定でアクティブブックの位置に対する相対パスとして解決されます。ブックだけを移動すると基準位置が変わります。 | 対象セルを選び、Ctrl+Kまたは右クリックのEdit LinkでAddressを確認し、完全なパスか相対パスかを判定します。 |
| 同じ短いリンク名なのに、特定のブックだけ別フォルダーを基準に開く | ブックのAdvanced PropertiesにHyperlink baseが設定されている可能性があります。 | File > Info > Properties > Advanced Properties > SummaryのHyperlink baseを確認します。 |
| セルには=HYPERLINK(…)が表示され、Edit Linkで変更できない | リンク先がHyperlinkオブジェクトではなくワークシート関数の引数として保存されています。 | セルを選択して数式バーのlink_locationを確認し、参照セルや文字列を修正します。 |
| ファイルを開くとデータ更新の警告が出る、またはDataタブにWorkbook Linksが表示される | これはクリック用ハイパーリンクではなく、別ブックのセル値を参照するWorkbook Linkです。 | Data > Queries and Connections > Workbook Linksを開き、参照元、状態、Refresh settingsを確認します。 |
| 同じブック内のシートへ移動するリンクが外部ファイルのように開こうとする | 内部リンクのAddressとSubAddressが混同されているか、HYPERLINK関数の先頭に#がない可能性があります。 | Ctrl+KのPlace in This Documentで作り直すか、HYPERLINK関数なら=HYPERLINK("#’Sheet 2′!A1","移動")の形式を確認します。 |
Microsoft 365で絶対パスが変わるときの比較方法
「絶対パスで指定したのに変わった」場合は、保存前・再表示後・ブックを移動した後を分けて確認します。表示名が同じでも、リンクの種類や保存場所によって確認する値が違います。元のブックをコピーし、まず一つのリンクだけで次の記録を取ってください。
| 場面 | 確認する値 | 結果から次に調べること |
|---|---|---|
| 変更前 | 通常リンクのAddress、HYPERLINKのlink_location、ブックの保存先 | 表示文字列ではなく実際の参照先を残す |
| 同じ場所へ保存して開き直す | 同じリンクの値と実際に開く先 | 保存・再読込の前後で値が変わるか、開く先だけが変わるか |
| コピーを別フォルダーへ置く | Hyperlink baseと相対位置、完全なパスの有無 | 相対リンクの基準変化と絶対リンクの移動を区別する |
| 別の利用者・PCで開く | 共有への権限、ドライブ文字、利用者固有のローカルパス | パスの書き換えと、リンク先へ到達できない状態を区別する |
| SharePointのファイルを開く | HTTPSのリンクか、同期済みフォルダーへのローカルパスか | 他の利用者にも同じ保存場所が存在する前提にしない |
通常のリンクはCtrl+Kでリンク先を確認し、HYPERLINK関数は数式バーの引数を確認します。VBAで監査するときも、Addressは対象文書のアドレス、SubAddressは文書内の場所として別々に記録してください。保存先を変えただけでリンクが変わったと断定せず、同じ操作・同じ参照先で前後を比較します。
「保存時にリンクを更新する」を外せば必ず直る?
Webオプションにある保存時のリンク更新設定は、外部ブックの値の更新とは別のものです。DefaultWebOptions.UpdateLinksOnSaveの公式仕様は、文書をWebページとして保存する際にハイパーリンクと関連ファイルのパスを更新する動作を説明しています。この仕様だけを根拠に、すべての.xlsx保存やMicrosoft 365の環境で絶対パスの変化を防げるとは保証できません。
その設定を比較する場合は、実際に表示される項目と元の値を記録し、同じコピー・同じ保存形式・同じ場所で変更前後を確認します。Excel全体の設定をブックのイベントマクロで強制変更する方法は、ほかのブックへの影響や異常終了時の復元も必要になります。まず個別リンクの値と基準パスを確認し、一律の設定変更から始めないでください。
SharePointのリンクと同期フォルダーのパスを混同しない
SharePointの文書を複数人で開く用途では、リンクが組織のHTTPSアドレスを指すのか、自分のPCの同期フォルダーを指すのかを確認します。C:から始まる利用者固有のパスは、別のPCでも同じとは限りません。HTTPSの文書リンクを使う場合も、対象者の権限と、想定したファイルが開くことを確認します。共有範囲を広げることや、リンク更新の警告を消すことをパス修正の代わりにしないでください。
安全な対処手順
1. バックアップを作り、リンクの種類を判定する
最初にブックのコピーを作り、問題のリンクを一つだけ調べます。クリックしてファイルやWebページを開くならハイパーリンク、セルの数式に別ブック名が含まれるならWorkbook Link、数式がHYPERLINKで始まるなら関数型リンクです。種類によって直す画面が違うため、一括置換から始めないことが重要です。
- 元ブックを閉じ、日付付きのコピーを作る
- Ctrl+KでAddressを確認する
- 数式バーにHYPERLINK関数または[別ブック.xlsx]がないか確認する
- Data > Queries and Connections > Workbook Linksの有無を確認する
注意:Windowsのデスクトップ版でWorkbook LinkのBreak linksを使うと数式を現在値へ変換し、元に戻せません。必ずバックアップを作ってください。
2. Hyperlink baseとフォルダー構成を正す
Excelでは、リンク先ファイルのパスを省略すると現在のブック位置を基準に解決します。特定の共通フォルダーを基準にしたい場合だけHyperlink baseを設定します。意図しない値が入っている場合は、影響を確認したうえで空欄にするか正しい共通ルートへ直します。配布先でも同じフォルダー構造を保つなら相対パス、場所が固定された社内共有なら完全なUNCパスを使うと意図が明確です。
- File > Info > Properties > Advanced Propertiesを開く
- SummaryタブのHyperlink baseを確認する
- 相対リンクを使うならブックとリンク先の共通ルートを固定する
- 絶対リンクを使うならドライブ文字より組織で一貫した共有パスを検討する
注意:Hyperlink baseを変更すると、短い相対リンクがまとめて別の場所を指す可能性があります。コピーで全リンクを確認してから本番へ反映してください。
3. 個別リンクとHYPERLINK関数を正しい方法で修正する
通常のハイパーリンクはセルまたは図形を選び、Ctrl+KまたはEdit LinkでAddressを修正します。同じブック内ならPlace in This Documentを選びます。HYPERLINK関数で作られたリンクはEdit Linkではなく数式バーを編集します。シート名に空白がある場合はシート名を単一引用符で囲み、同一ブック内の参照先には先頭の#を付けます。
- 外部ファイル: =HYPERLINK("\\server\share\manual.pdf","手順書")
- 同一ブック内: =HYPERLINK("#’Sheet 2′!A1","Sheet 2へ")
- 通常リンクはCtrl+K、関数型リンクは数式バーで修正する
- 修正後にリンク先のファイルとセル位置を実際に開いて確認する
=HYPERLINK("#'Sheet 2'!A1","Sheet 2へ")
=HYPERLINK("\\server\share\manual.pdf","手順書")
注意:信頼できないブックのリンクを開かないでください。外部ファイルやURLは、意図しないプログラムや認証画面を開くことがあります。
4. VBAで全ハイパーリンクを監査してから限定置換する
多数のリンクを直す場合は、最初にAddressとSubAddressを一覧化し、古いルートがどのリンクに含まれるか確認します。置換マクロは、Addressの先頭がOLD_ROOTと完全一致した場合だけ変更し、同じ文字列を途中に含むWeb URLやSubAddressには触れません。テストコピーで変更件数とリンク先を確認した後に使用します。
- VBEのImmediateウィンドウへ監査結果を出す
- OLD_ROOTとNEW_ROOTは末尾のバックスラッシュを含めて指定する
- 変更件数を表示し、想定数と一致するか確認する
- HYPERLINK関数で作った数式は別途数式検索で確認する
Option Explicit
Sub AuditHyperlinks()
Dim ws As Worksheet
Dim h As Hyperlink
For Each ws In ThisWorkbook.Worksheets
For Each h In ws.Hyperlinks
Debug.Print ws.Name & vbTab & h.Address & vbTab & h.SubAddress
Next h
Next ws
End Sub
Option Explicit
Sub ReplaceHyperlinkRoot()
Const OLD_ROOT As String = "C:\OldRoot\"
Const NEW_ROOT As String = "\\server\share\NewRoot\"
Dim ws As Worksheet
Dim h As Hyperlink
Dim changed As Long
For Each ws In ThisWorkbook.Worksheets
For Each h In ws.Hyperlinks
If Len(h.Address) >= Len(OLD_ROOT) Then
If StrComp(Left$(h.Address, Len(OLD_ROOT)), OLD_ROOT, vbTextCompare) = 0 Then
h.Address = NEW_ROOT & Mid$(h.Address, Len(OLD_ROOT) + 1)
changed = changed + 1
End If
End If
Next h
Next ws
MsgBox CStr(changed) & "件のハイパーリンクを更新しました。", vbInformation
End Sub
注意:ActiveWorkbookではなくThisWorkbookを使う例です。マクロを別ブックやPERSONAL.XLSBへ置く場合は対象が変わるため、そのまま実行せず参照先を確認してください。
5. Workbook Linksは専用ペインで別に修正する
別ブックのセル値を参照するWorkbook Linkは、「Data > Queries and Connections > Workbook Links」で管理します。参照元が移動した場合はChange sourceを使います。起動時の更新を止めたい場合はRefresh settingsでDon’t refreshを選べますが、値が古いままになることを利用者へ明示します。Break linksは数式を値へ変換するため、不要になった参照を完全に切るときだけ使います。
- Workbook Linksで参照元と状態を確認する
- 移動した参照元はChange sourceで指定し直す
- 更新方針はAsk to refresh、Always refresh、Don’t refreshから目的に合わせて選ぶ
- Break links前に必ず別名保存する
注意:「Ask to update automatic links」の警告設定とハイパーリンクのパス書き換えは別問題です。警告を消す設定だけで壊れたハイパーリンクは直りません。
よくある質問
ハイパーリンクを絶対パスにすれば二度と壊れませんか?
必ずしもそうではありません。絶対パスは基準が明確ですが、共有サーバー名やフォルダー名が変わると壊れます。複数人へブックと関連ファイルをまとめて配布するなら共通フォルダー内の相対パス、固定された社内共有を参照するなら管理されたUNCパスなど、運用に合わせて選んでください。
DataタブのWorkbook Linksでハイパーリンクも直せますか?
直せません。Workbook Linksは、別ブックのセル値を数式などで参照する外部リンクを管理する機能です。クリックしてファイルやWebページを開くハイパーリンクはCtrl+KまたはEdit Link、HYPERLINK関数は数式バーで修正します。
同じブック内の別シートへ確実に移動する式はありますか?
HYPERLINK関数なら、たとえば=HYPERLINK("#’Sheet 2′!A1","Sheet 2へ")と書けます。先頭の#は同じブック内を示し、空白を含むシート名は単一引用符で囲みます。通常のリンクならCtrl+KでPlace in This Documentを選ぶ方法でも作成できます。
公式情報
画面や仕様が異なる場合は、利用中の製品・契約・管理ポリシーを確認したうえで公式情報を参照してください。
- Microsoft Support: Excelのハイパーリンク、相対パス、Hyperlink base
- Microsoft Support: Workbook Linksの更新・変更・切断
- Microsoft Learn: Excel VBA Hyperlinks.Add
- Microsoft Learn: Excel VBA Hyperlink.SubAddress
まとめ
原因を一つずつ切り分け、変更前の状態と結果を記録しながら進めることが重要です。操作後は同じ症状が再発しないか確認し、組織管理の端末ではポリシー変更を管理者へ確認してください。

コメント