忍者ブログ
VBAによる実用アプリケーションの構築、およびGAS(Google Apps Script)やOffice Scriptへのモダンな移行パスを検証・解説するテックブログ。現場で即戦力となるコードモジュールや再利用可能な実用部品を継続的に提供します。

【VBAサンプル】他のBookからデータを取得する方法!エラー処理付きで安全に外部ファイルを読み込む

VBAで他のBook(外部のExcelファイル)からデータを取得するプログラムです。
ファイルが存在しない場合や開けないトラブルに対応するため、
エラー処理(On Error GoTo)を追加して、安全にエラー内容をコンソールに出力して終了する実装を解説します。

1. サンプル(エラー処理付き)

data.xlsxというBookの、datasheetシートの、A1の値を出力します。

Sub GetDataFromOtherBook()
    ' エラーが発生したら ErrorHandler へジャンプ
    On Error GoTo ErrorHandler

    Dim ex As New Excel.Application ' 処理用Excel
    Dim workbook As workbook ' ワークブック
    Dim workbookPath As String ' xlsxファイルのパス
    
    ' 開くブックを指定
    workbookPath = "ここには、PATHを書く\data.xlsx"
    
    ' 読み取り専用で開く
    Set workbook = ex.Workbooks.Open(Filename:=workbookPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True)
    
    ' datasheetというシートのA1のセルの値を出力
    Debug.Print workbook.Sheets("datasheet").Range("A1")
    
    ' ブックを閉じる
    Call workbook.Close
    
    ' Excelアプリケーションを閉じる
    Call ex.Application.Quit
    Exit Sub

ErrorHandler:
    ' エラーが発生した場合はコンソール(イミディエイトウィンドウ)に出力して終了
    Debug.Print "エラーが発生しました: " & Err.Description
    If Not workbook Is Nothing Then Call workbook.Close
    If Not ex Is Nothing Then Call ex.Application.Quit
End Sub

2. プログラムの解説

元のプログラムに加えたエラー処理と各コードのポイントです。

① On Error GoTo ErrorHandler
「指定したパスにファイルが存在しない」「ファイルが開けない」「指定したシート名(datasheet)が存在しない」といったエラーが発生した際、即座にプログラムを中断せず `ErrorHandler:` の行へ処理をスキップさせます。
② Err.Description
VBAが保持しているエラーの説明文(例:「ファイルが見つかりません」「インデックスが有効範囲にありません」など)を取得し、`Debug.Print` でコンソール(イミディエイトウィンドウ)に出力します。
③ エラー時の後片付け処理
エラー発生時にそのまま終了してしまうと、裏でExcelアプリ(`ex`)が開いたまま残ってしまう可能性があるため、`ErrorHandler:` 内でもブックやExcelアプリを閉じる処理(`Close` / `Quit`)を実行してから安全に終了します。

3. 実行結果

■ 正常に実行できた場合:

A1の値が出力されます

■ ファイルが存在しない・開けない場合(エラー時):

エラーが発生しました: File not found.(※発生したエラー内容が出力されます)