開くたびに「リンクを更新しますか?」とでて鬱陶しい…
リンクを一括で解除するコードが知りたい!
ブック内でリンクがどこにあるか分からない時、一つずつ探すのはかなり大変な作業です。ただ、毎回「リンクを更新しますか?」と聞かれたり、なんかエクセルが重かったりすると、面倒ですよね。
この記事では、そんなリンクをVBA(マクロ)を使って一括解除する方法を紹介します。 コピペするだけで使えるコードになっているので、気軽に使ってみてください!
ただ最新のExcelであれば、標準機能でもリンクの一括解除は可能です。 詳細は以下の記事で詳しく解説していますので、そちらも併せて確認してみてください!
【コピペOK】VBAで外部リンクを一括解除するコード
まずは、コピペで使えるコードを紹介します。このコードを、リンクを解除したいエクセルで実行してください。
詳しいやり方は、別途紹介します。
Sub BreakLinksInThisWorkbook()
' ■ 1. 変数の宣言
Dim allLinks As Variant ' リンクソースの配列
Dim linkType As Long ' 1: Excelリンク, 2: OLEリンク
Dim linkIndex As Long ' リンク配列のインデックス
Dim currentLink As String ' 個々のリンクパス
Dim linkFound As Boolean ' リンクが1つでも見つかったか
linkFound = False
' ■ 2. エラーハンドリング設定
' BreakLinkが失敗しても止まらないように、後で局所的に設定しますが
' 全体的なエラーキャッチも設定しておきます。
On Error GoTo ErrorHandler
' ■ 3. このブック内のリンクを処理
' 2種類のリンク(Excel, OLE)をチェック
For linkType = 1 To 2
' リンクソースのリストを取得
If linkType = 1 Then
allLinks = ThisWorkbook.LinkSources(xlExcelLinks) ' Excelリンク
Else
allLinks = ThisWorkbook.LinkSources(xlOLELinks) ' OLEリンク
End If
' リンクが1つでも存在する場合
If IsArray(allLinks) Then
linkFound = True ' リンクが見つかった
' BreakLinkメソッドは失敗することがあるため、
' ループ内でのみエラーを無視する
On Error Resume Next
For linkIndex = 1 To UBound(allLinks)
currentLink = allLinks(linkIndex)
' リンクの種類に応じてリンクを解除(値に変換)
If linkType = 1 Then
ThisWorkbook.BreakLink Name:=currentLink, Type:=xlLinkTypeExcelLinks
Else
ThisWorkbook.BreakLink Name:=currentLink, Type:=xlLinkTypeOLELinks
End If
' エラーが発生してもクリアして次のリンクへ進む
Err.Clear
Next linkIndex
' エラーハンドリングを元に戻す
On Error GoTo ErrorHandler
End If
Next linkType
' ■ 4. 完了メッセージ
If linkFound Then
MsgBox "このブックの外部リンクはすべて解除され、値に変換されました。", vbInformation
Else
MsgBox "このブックに外部リンクは見つかりませんでした。", vbInformation
End If
Exit Sub ' 正常終了時はここでプロシージャを抜ける
' ■ 5. エラー処理
ErrorHandler:
MsgBox "処理中にエラーが発生しました。" & vbCrLf & _
"エラー番号: " & Err.Number & vbCrLf & _
"内容: " & Err.Description, vbCritical
End Sub
注意点ですが、一度このVBAを実行し、リンクを解除(値に変換)すると元に戻せません。実行前には、必ずファイルのバックアップ(コピー)を取得してから、VBAを使ってください。
実行と結果の紹介
VBAコードの実行は簡単です。 リンクを消したいExcelブックに貼り付けて実行します。 手順を画像付きで解説します。
1. ファイルのバックアップ
リンクを解除すると元に戻せなくなります。必ずファイルのバックアップを取ってから実行しましょう。

2. VBAコードの貼り付け/マクロの実行
リンクを解除したいエクセルに、VBAコードを張り付けて実行します。

詳しい貼り付け方法や、実行方法については長くなってしまうので、別記事にまとめています。わからない方は、こちらを参考にしてみてください!
3. 実行結果
マクロを実行すると、処理が完了した時点でメッセージが表示されます。 リンクが見つかり、正常に解除された場合、以下のメッセージが出ます。

これが表示されれば、外部リンクを参照していたセルが値に変更されています。これで、ファイルを開くたびに表示されていた警告が出なくなります。
ちなみに、外部リンクが見つからなかった場合は、以下の別のメッセージが出ます。

さいごに
今回は、Excelの外部リンクをVBAで一括解除する方法を紹介しました。 VBAコードをコピペするだけで、一瞬で解除できますのでぜひ使ってみてください。
ただ、最新のエクセルを使っている方であれば、標準機能を使うほうが確実に楽です。別ページで標準機能を使ったリンク解除方法も紹介しているので合わせて確認してみてください。
またVBAやExcelの効率化について、体系的に学ぶには、専門書を読むのが最適です。別記事でKindle Unlimitedで読めるおすすめ書籍を紹介しているので、この機会にぜひ読んでみてください。Kindle Unlimitedは最初の30日間は無料なので、無料期間で読み切って解約すればすべてタダで読むこともできます!
PR記事にはなってしまいますが、効率化スキルを身につけるツールとして、ぜひご検討してみてください!
→【30日無料】Kindle UnlimitedでVBA・フレームワーク・デザインを学ぼう






コメント