サイトアイコン 効率化大全

【コピペでOK】Excel VBAでExcel外部リンクを一括解除!コピペで使えるコード付き解説!

開くたびに「リンクを更新しますか?」とでて鬱陶しい…
リンクを一括で解除するコードが知りたい!

ブック内でリンクがどこにあるか分からない時、一つずつ探すのはかなり大変な作業です。ただ、毎回「リンクを更新しますか?」と聞かれたり、なんかエクセルが重かったりすると、面倒ですよね。

この記事では、そんなリンクを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コードを張り付けて実行します。

詳しい貼り付け方法や、実行方法については長くなってしまうので、別記事にまとめています。わからない方は、こちらを参考にしてみてください!

→VBAコードの書き方/実行方法を確認!

3. 実行結果

マクロを実行すると、処理が完了した時点でメッセージが表示されます。 リンクが見つかり、正常に解除された場合、以下のメッセージが出ます。

これが表示されれば、外部リンクを参照していたセルが値に変更されています。これで、ファイルを開くたびに表示されていた警告が出なくなります。

ちなみに、外部リンクが見つからなかった場合は、以下の別のメッセージが出ます。

さいごに

今回は、Excelの外部リンクをVBAで一括解除する方法を紹介しました。 VBAコードをコピペするだけで、一瞬で解除できますのでぜひ使ってみてください。

ただ、最新のエクセルを使っている方であれば、標準機能を使うほうが確実に楽です。別ページで標準機能を使ったリンク解除方法も紹介しているので合わせて確認してみてください。

外部リンクの検索・解除をボタン一つで実行する方法!

またVBAやExcelの効率化について、体系的に学ぶには、専門書を読むのが最適です。別記事でKindle Unlimitedで読めるおすすめ書籍を紹介しているので、この機会にぜひ読んでみてください。Kindle Unlimitedは最初の30日間は無料なので、無料期間で読み切って解約すればすべてタダで読むこともできます!

PR記事にはなってしまいますが、効率化スキルを身につけるツールとして、ぜひご検討してみてください!

→【30日無料】Kindle UnlimitedでVBA・フレームワーク・デザインを学ぼう

モバイルバージョンを終了