ExcelでのVBA実行時エラー76「パスが見つかりません」を修正する方法

beginner📊 Microsoft Excel2026-07-09| Microsoft Excel (Office 365, 2021, 2019, 2016) - Windows 10/11

Error Message

Run-time error '76': Path not found
#vba#excel#自動化#トラブルシューティング#filesystemobject

エラーの発生シナリオ

数ヶ月間完璧に動作していたマクロを想像してみてください。新しい四半期の初日に、突然「パスが見つかりません」というメッセージとともにクラッシュしました。これは通常、マクロがまだ作成されていないフォルダーにPDFを保存したりCSVをエクスポートしようとしたときに発生します。

Run-time error '76': Path not found

「デバッグ」ボタンを押すと、通常Excelは OpenSaveAsFileCopy、または ChDir を含む行をハイライトします。コードが必ずしも壊れているわけではありません。単にドライブ上に存在しないディレクトリを探しているだけです。

なぜこのエラーが発生するのか

VBAは非常に忠実です。C:\Company\Invoices\2024\January\Inv_001.xlsx にファイルを保存するように指示した場合、そのチェーン内のすべてのフォルダーが事前に存在している必要があります。VBAはディレクトリツリーを自動的に構築してはくれません。サブフォルダーが1つでも欠けていると、処理は停止します。一般的な原因は以下の通りです:

  • ハードコードされたユーザー名: C:\Users\Sarah\Documents のようなパスを使用していると、別のユーザーが自分のノートPCで同じマクロを実行しようとした瞬間に失敗します。
  • 日付ベースのフォルダー: 月ごとに新しいフォルダーを作成するマクロ(例:「\2024\February\」)は、そのフォルダーを手動で作成していない場合、月の初日にクラッシュします。
  • ネットワークの切断: 再起動後に再接続されていないネットワークドライブ(Z:\ など)が原因です。

クイック修正:手動での確認

コードを修正する前に、パスが実際にシステム上に存在するか確認してください。数秒で実行できます:

  • VBAエディタでパス変数にマウスを合わせ、現在の値を確認します。
  • フルパスをコピーします。ただし、末尾のファイル名は除外してください。
  • Win + R を押し、ボックスにパスを貼り付けてEnterキーを押します。
  • Windowsがエラーを返した場合、ディレクトリ名が間違っているか、存在しないことが確認できます。

恒久的な対策1:保存前にフォルダーを確認する

保存を試みる前にフォルダーが存在するかチェックすることで、クラッシュを防ぎます。Dir 関数を使用するのが最も速い方法です。Dir が空の文字列を返す場合、そのパスは無効です。

Sub SaveReport()
    Dim folderPath As String
    folderPath = "C:\MonthlyExports\Reports\"

    ' 続行する前にフォルダーが存在するか確認する
    If Dir(folderPath, vbDirectory) = "" Then
        MsgBox "停止!フォルダーが見つかりません: " & folderPath, vbCritical
        Exit Sub
    End If

    ActiveWorkbook.SaveAs folderPath & "Final_Report.xlsx"
End Sub

恒久的な対策2:不足しているフォルダーを自動的に作成する

賢いマクロは、フォルダーがないことに文句を言うだけでなく、それを作成します。MkDir コマンドを使用してディレクトリを構築できます。ただし、MkDir は一度に1つの階層しか作成できないため、親フォルダーが既に存在している必要があることに注意してください。

Sub SmartSave()
    Dim targetPath As String
    targetPath = "C:\Reports\" & Year(Date)

    ' フォルダーが存在しない場合は、年名のフォルダーを作成する
    If Dir(targetPath, vbDirectory) = "" Then
        MkDir targetPath 
    End If

    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=targetPath & "\Export.pdf"
End Sub

恒久的な対策3:深い階層のフォルダーを構築する

C:\Archive\2024\Marketing\Project_A のような複雑なパスを作成する必要がある場合は、FileSystemObject (FSO) を使用します。これは標準のVBAコマンドよりもはるかに汎用性があります。まず、VBAエディタの ツール > 参照設定Microsoft Scripting Runtime にチェックを入れてください。

Sub CreateDeepPath()
    Dim folderPath As String
    folderPath = "C:\Database\Backups\Archive\" & Year(Date)

    ' ヘルパールーチンを使用してツリー全体を構築する
    EnsurePathExists folderPath

    ActiveWorkbook.SaveAs folderPath & "\Backup.xlsx"
End Sub

Sub EnsurePathExists(ByVal fullPath As String)
    Dim fso As New FileSystemObject
    Dim parts() As String
    Dim currentPath As String
    Dim i As Integer

    parts = Split(fullPath, "\")
    currentPath = parts(0)

    For i = 1 To UBound(parts)
        currentPath = currentPath & "\" & parts(i)
        If Not fso.FolderExists(currentPath) Then
            fso.CreateFolder currentPath
        End If
    Next i
End Sub

解決策のテスト

修正が完璧であることを確認するために、次のテストを試してください:ドライブから保存先フォルダーを削除してからマクロを実行します。修正が成功していれば、エラー 76 のポップアップが表示されることなく、フォルダーが自動的に再作成され、ファイルが保存されます。2回目に実行して、フォルダーが既に存在することをコードが正しく識別できるか確認してください。

Related Error Notes