Article

VBA「実行時エラー 76 パスが見つかりません」が出る本当の条件

この記事で分かること

実行時エラー 76 と 53 の違い、SharePoint・OneDrive 環境で起きるパス文字数 260 前後の罠を Excel 2024 で実機再現。FSO 推奨の事前確認テンプレ付き。

VBA の 実行時エラー 76 パスが見つかりません は、ファイルやフォルダを操作する Open ステートメントや FSO(FileSystemObject)で、親フォルダ自体が無いときに出ます。同じ症状でも親フォルダがあってファイルだけ無ければ 53 ファイルが見つかりません になり、Workbooks.Open で出るのは 76 ではなく 1004 です。本記事では Excel 2024 build 19929 で 144 ケースを実機検証し、76 と隣接する 7 種のエラー番号の見分け方を整理します。

SharePoint や OneDrive 同期環境でパス文字数が 260 文字前後になる罠も独自軸として再現しました。事前確認に使える FileSystemObject ベースのコピペ用テンプレも掲載しています。

配布ファイル: VBA 実行時エラー 76 検証ブック (.xlsm)
本記事の 8 種エラー再現マクロと FSO 安全テンプレ、長パス境界デモを 1 ブックにまとめています。お使いの環境ではマクロブロックされる場合があります。本文のコードを直接コピーしてもご利用いただけます。

vba-runtime-error-76-sample.xlsm

エラー番号で先に見分ける早見表(8 種)

VBE で黄色く反転した行のメッセージボックスの番号を、まずこの表で確認してください。番号ごとに発生条件と対処入口が違います。

番号メッセージ代表的な発生コードまず見る場所
76パスが見つかりませんOpen / MkDir / ChDir / RmDir / FileCopy / GetAttr / FSO.GetFolder / FSO.OpenTextFile / FSO.CreateFolder親フォルダの実在 + ドライブ + パス文字数 260 前後
53ファイルが見つかりませんOpen For Input / Kill / Name / SetAttr / Dir / FSO.GetFile / FSO.FileExistsファイル名のタイポ + 削除済み + パス文字数 260 前後
52ファイル名または番号が不正Open For Output(UNC でサーバー未到達)UNC サーバー名 + 名前解決
55ファイルは既に開かれています同じファイルへの 2 重 Openすでに開いていないか / Close 済みか
58既に同じ名前のファイルが…FSO.CreateFolder(既存)同名フォルダ・ファイル
68デバイスは使用できませんChDrive(不在ドライブ)ドライブマッピング
75パス/ファイル アクセス エラーOpen For Output(書込禁止)/ MkDir(重複)/ RmDir(中身あり)書き込み権限 + 重複 + 中身
1004アプリケーション定義またはオブジェクト定義のエラーWorkbooks.Open / Workbooks.OpenText / Workbook.SaveAsExcel オブジェクトモデル系(VBA File I/O 由来ではない)
この表は Excel 2024 build 19929(Windows 11 25H2、Office Home & Business 2024 永続版)で 144 ケースを実機検証した結果です。Excel 2019 / 2021 / Mac / Web 版は本記事の検証範囲外で、同じ挙動である可能性が高いものの未検証です。

この検証で 76 を再現できた代表条件 3 つ

本検証で 実行時エラー 76 を出せた条件は、次の 3 通りに整理できます。それ以外の条件で 76 を出している場合は、別の番号と取り違えている可能性が高いので、上の早見表で番号自体を確認してください。

条件 1: 親フォルダが存在しない

もっとも多いケースです。Open ステートメントの読み書きいずれでも、親フォルダが無ければ 76 になります。

' 親フォルダ "C:\存在しないフォルダ" が無い → 実行時エラー 76
Open "C:\存在しないフォルダ\データ.txt" For Input As #1
Open "C:\存在しないフォルダ\出力.txt" For Output As #2

' 同じく MkDir、ChDir、RmDir、FileCopy、GetAttr も親不在で 76
MkDir "C:\存在しないフォルダ\新規"
ChDir "C:\存在しないフォルダ"

条件 2: ドライブ自体が存在しない

マッピングされていないドライブレター(例: Z:)を指定すると 76 になります。一方、ChDrive だけは 68 デバイスは使用できません という別番号を返すので注意してください。

' 不在ドライブの Open ステートメントは 76
Open "Z:\file.txt" For Output As #1

' MkDir も 76
MkDir "Z:\新規フォルダ"

' ChDrive だけは 68 デバイスは使用できません
ChDrive "Z"

条件 3: パス文字数が 260 文字前後(フォルダ系のみ 76)

SharePoint や OneDrive で深い階層に同期しているとよく踏みます。実在するフォルダでも、通常パス(\\?\ プレフィクスを使わない普通のパス)の文字数が約 260 文字を超えると VBA / FSO 側からはアクセスできず、76 になります。

' 例: ThisWorkbook.Path が 260 文字以上のとき
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim fld As Object
Set fld = fso.GetFolder(ThisWorkbook.Path)   ' ← 260 文字超で 76

境界の詳細は後述の「パス文字数 260 前後で発生する 76 と 53」で実機の数値表とあわせて解説します。

53「ファイルが見つかりません」との違い(パス vs ファイル)

76 と最も混同されるのが 53 です。覚え方はシンプルで、親フォルダの有無で 76、ファイルの有無で 53 です。

状況出る番号
親フォルダが無いOpen "C:\存在しないフォルダ\file.txt" For Input76
親フォルダはある、ファイル名だけが無いOpen "C:\Windows\存在しないファイル.txt" For Input53
同じ親フォルダで KillKill "C:\Windows\存在しないファイル.txt"53
同じ親フォルダで NameName "C:\Windows\旧.txt" As "..."53
同じ親フォルダで GetAttr / FileCopyGetAttr "C:\Windows\存在しないファイル.txt"53

Kill だけは親フォルダ不在でも 53(76 ではない)

例外として、Kill ステートメントは親フォルダが存在しない場合でも 76 ではなく 53 を返します。Kill のメッセージが「ファイルが見つかりません」だからといって、必ずしもパスが正しいとは限りません。

' 親フォルダ自体が無い場合でも、Kill は 53 を返す
Kill "C:\存在しないフォルダ\file.txt"   ' → 76 ではなく 53

新規未保存ブックの ThisWorkbook.Path は空文字

もう一つ、相対パスを組み立てるときに踏みやすい罠があります。Workbooks.Add で開いたまま保存していないブックでは、ThisWorkbook.Path が空文字を返します。

Sub 罠の例()
    ' 未保存ブックでは ThisWorkbook.Path = ""
    ' ↓ "C:\Users\..." ではなく "\データ.txt" になる
    Dim target As String
    target = ThisWorkbook.Path & "\データ.txt"
    Open target For Input As #1   ' 53 / 76 / 別の場所に作成のいずれか
End Sub

外部ファイルを参照するマクロでは、必ず冒頭でブックが保存済みかチェックしてください。後述の 事前確認テンプレに組み込んでいます。Excel での保存場所の取得方法は Excel でファイルの保存場所・パスを取得する計算式を作成するもあわせてご参照ください。

Workbooks.Open は 76 ではなく 1004(誤解の整理)

Workbooks.Open でファイルが無いと 76 が出る」という解説を見かけますが、Excel 2024 で実機検証した結果、Workbooks.Open は親不在・ファイル不在・不在ドライブのいずれでも 1004 を返します。これは VBA の File I/O ステートメント由来の 76 とは別で、Excel オブジェクトモデル側のメソッドエラーとして 1004 になるからです。

' いずれも 1004(76 ではない)
Workbooks.Open "C:\存在しないフォルダ\book.xlsx"
Workbooks.Open "C:\Windows\存在しない.xlsx"
Workbooks.Open "Z:\book.xlsx"

' 同様に Workbooks.OpenText、Workbook.SaveAs も 1004
Workbooks.OpenText "C:\存在しないフォルダ\data.csv"

1004 もメッセージで「○○ が見つかりません」と表示されるため 76 と誤認しやすいのですが、メッセージボックス末尾の番号「1004」を確認すれば取り違えを防げます。エラー処理の Err.Number での分岐でも、76 と 1004 を別ルートで扱う必要があります。エラーハンドリング全般のステートメント整理は エラーハンドリングに関連する Excel VBA ステートメントのリストを参照してください。

UNC・ドライブ・権限の 3 隣接エラー(52 / 68 / 75)

76 や 53 ほどではないものの、ファイル / フォルダ系で出やすい番号が 3 つあります。

52: UNC でサーバーに到達できない

本検証条件では 52 ファイル名または番号が不正 が返りました。ネットワーク状態や名前解決の差で結果は変わり得るので、UNC で 52 が出たら最初にサーバー名のタイプミスとネットワーク疎通を確認してください。

' 不在サーバー / 解決できないサーバー名
Open "\\unknown-server\share\file.txt" For Output As #1   ' 52

68: ChDrive で不在ドライブ

不在ドライブを ChDrive で指定すると 68 デバイスは使用できません が出ます。同じ不在ドライブでも OpenMkDir は 76 を返すので、操作の種類で番号が変わる典型例です。

ChDrive "Z"   ' 68 デバイスは使用できません

75: 書き込み禁止フォルダ・重複 MkDir・中身ありの RmDir

75 パス/ファイル アクセス エラー は、フォルダ・ファイル自体は到達できているのに操作が許可されない場合に出ます。次の 3 種が代表的です。

' 書き込み禁止フォルダへの出力
Open "C:\Windows\System32\drivers\etc\probe.txt" For Output As #1   ' 75

' すでに同じフォルダがあるのに MkDir
MkDir "C:\Windows"   ' 75

' 中身が残っているフォルダの RmDir
RmDir "C:\notempty"   ' 75

パス文字数 260 文字前後で発生する 76 と 53(SharePoint / OneDrive 環境の典型)

テレワーク・クラウド連携が進んだ環境で目立ってきた罠です。Windows の通常パスには 260 文字(MAX_PATH)の制約があり、SharePoint や OneDrive で深い階層に同期するとマクロ側だけ突然動かなくなります。

本検証では、実在する 248 / 259 / 260 / 261 / 270 / 300 文字の長フォルダと長ファイルを \\?\ プレフィクス経由で作成し、通常パスを VBA / FSO に渡して境界を測定しました。

フォルダを開こうとすると 76(フォルダ系 API)

通常パス長FSO.GetFolderFSO.FolderExistsChDirDir(…, vbDirectory)
248成功True成功成功
259成功True76成功
26076False7653
261 / 270 / 30076False7653

ファイルを開こうとすると 53(ファイル系 API)

通常パス長DirFSO.FileExistsFSO.GetFileOpen For InputGetAttr
248ファイル名を返すTrue成功成功成功
259ファイル名を返すTrue成功成功成功
26053False535353
261 / 270 / 30053False535353

長パス境界 - フォルダ系 76 / ファイル系 53 のマトリクス

2 つの表から、長パスが原因のときは フォルダを開く操作なら 76、ファイルを開く操作なら 53 という非対称性が読み取れます。境界は両方ともおおよそ 260 文字ですが、API ごとに 1 文字ずれることもある(ChDir は 259 で先に失敗)ので、本文では「260 文字前後」と覚えておくのが安全です。

長パス対策の順序

マクロ配布側が手を打てる順序は次の通りです。レジストリ変更は副作用が大きいので最後の手段にしてください。

  1. フォルダ名・ファイル名を短くする(最も影響範囲が小さい)
  2. OneDrive / SharePoint の同期起点を浅い場所に変更する
  3. ドライブ直下に近い場所へ移動する
  4. HKLM\System\CurrentControlSet\Control\FileSystem\LongPathsEnabled をレジストリで有効化する(アプリ側のマニフェスト対応も必要、配布マクロでは推奨しない)

再発防止: FileSystemObject で安全に事前確認するテンプレ

76 / 53 を未然に避けるための事前確認は、Dir 関数より FileSystemObject の方が安全です。Dir は通常パスが 260 文字を超えると 53 や空文字を返し、存在しているのか長すぎるのか区別できません。FSO の FolderExists / FileExists はエラーを出さず True / False を返すので分岐に使えます。

注意:FSO の FolderExists / FileExists は「長いパスでも安定」なわけではありません。通常パスが 260 文字前後を超えると、実在しても False を返します。「False = 存在しない」と決めつけず、「アクセスできない(長すぎ含む)」と扱ってください。本テンプレでは関数名を CanAccessFolderPath / CanAccessFilePath として、その意味合いを明示しています。
' フォルダ用: アクセスできるか(実在 + 通常パスで扱える)を返す
Function CanAccessFolderPath(ByVal target As String) As Boolean
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    CanAccessFolderPath = fso.FolderExists(target)
End Function

' ファイル用
Function CanAccessFilePath(ByVal target As String) As Boolean
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    CanAccessFilePath = fso.FileExists(target)
End Function

Sub OpenWorkbookSafely()
    ' 1. ブック保存済みか確認(ThisWorkbook.Path 空文字の罠回避)
    If ThisWorkbook.Path = "" Then
        MsgBox "このブックを保存してから実行してください。", vbExclamation
        Exit Sub
    End If

    ' 2. パス区切りを安全に連結する(FSO.BuildPath 推奨)
    '    BuildPath は OS のパス区切り文字を自動挿入するため、
    '    手で "\" を書く必要がなく、二重区切りや欠落の事故を避けられる
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim target As String
    target = fso.BuildPath(ThisWorkbook.Path, "sample.xlsx")

    ' 3. アクセス可能かチェック
    '    False は「存在しない」だけでなく「通常パス 260 文字を超えている」も含む
    If Not CanAccessFilePath(target) Then
        MsgBox "ファイルにアクセスできません: " & target & vbCrLf & _
               "(存在しない、または通常パスの文字数が 260 文字を超えている可能性)", _
               vbExclamation
        Exit Sub
    End If

    ' 4. ようやく開く
    Workbooks.Open target
End Sub

VBE Immediate ウィンドウ FSO 安全テンプレの実行結果

エラー番号別 早見表まとめ

記事末尾に番号別の対応をもう一度まとめます。VBE で黄色行のメッセージ番号を見たら、ここから入ると最短です。

番号対処の起点
52UNC のサーバー名・名前解決を確認(環境依存)
53ファイル名のタイポ → 削除済みかどうか → 通常パス 260 文字前後 → 未保存ブックの ThisWorkbook.Path 空文字
55同じファイルを 2 重 Open していないか / Close 済みか
58同名のフォルダ・ファイルがすでに無いか
68ChDrive 先のドライブがマッピングされているか
75書き込み権限 + 重複 MkDir + 中身ある RmDir
76親フォルダの実在 + ドライブ + 通常パス 260 文字前後(フォルダ系)
1004Workbooks.Open / OpenText / SaveAs(VBA File I/O 由来ではなく Excel オブジェクトモデル由来)

エラーハンドリング側のステートメント(On Error Resume NextResume の使い分け、Err オブジェクトの参照方法など)は、別記事の エラーハンドリングに関連する Excel VBA ステートメントのリストでまとめています。

よくある質問(FAQ)

On Error Resume Next で全部押さえれば解決しますか?

テスト用には便利ですが、本番マクロで多用すると失敗が見えなくなり、後続処理が壊れたデータに対して動き続ける副作用が大きいです。本記事の CanAccessFilePath のように、取得する局所だけ On Error Resume Next で囲み、すぐ On Error GoTo 0 で戻す使い方が安全です。エラーハンドリング全般の整理は エラーハンドリングに関連する Excel VBA ステートメントのリストをどうぞ。

Mac 版や Web 版の Excel でも同じ番号ですか?

本記事の検証範囲は Windows 11 + Excel 2024 build 19929 のみです。Mac 版 VBA は Dir や FSO の挙動が異なる部分があり、Web 版の Excel には VBA そのものがありません。同じ番号体系である可能性は高いものの、Mac 環境で違う挙動が出た場合は別途確認が必要です。

LongPathsEnabled レジストリで MAX_PATH を解除すれば良いのでは?

レジストリ HKLM\System\CurrentControlSet\Control\FileSystem\LongPathsEnabled を 1 にしても、アプリ側のマニフェストで longPathAware が宣言されていないと有効になりません。配布マクロの読者環境でレジストリ変更を前提にすると、社内端末ポリシーで戻されて再現性が崩れます。まずフォルダ名短縮 → 同期起点変更 → 浅い場所への移動を試し、レジストリは最後の手段に回してください。

まとめ

VBA「実行時エラー 76 パスが見つかりません」が出たら、まず番号自体が 76 であることを確認してください。Workbooks.Open での失敗は 76 ではなく 1004、ファイル名だけ無い場合は 53、UNC・ドライブ・権限はそれぞれ 52 / 68 / 75 と、隣接するメッセージで番号が違います。

76 を再現できる代表条件は「親フォルダ不在」「ドライブ不在」「通常パス 260 文字前後(フォルダ系のみ)」の 3 つでした。長パス問題はファイル系では 53 に化けるため、エラー番号で問題を切り分けるときは API がフォルダ系かファイル系かをセットで考えると迷いません。事前確認には FSO.FolderExists / FSO.FileExists を使い、未保存ブックの ThisWorkbook.Path が空文字になる罠だけはコード冒頭で必ず弾くようにしてください。

本記事の検証データ(実機 144 ケース)と、再現マクロをまとめた配布 .xlsmこちらからダウンロードできます。エラーハンドリング全般のステートメントは エラーハンドリングに関連する Excel VBA ステートメントのリスト、ファイルパスを取得する関数の側は Excel でファイルの保存場所・パスを取得する計算式を作成するもあわせてご覧ください。

Next Read

このあと読む記事

今の内容に近い記事から、次の1本と補助記事を続けて見つけられるようにしています。

Keep Exploring

このテーマをさらに探す

同じテーマの入口記事と更新記事を、一覧の形でまとめています。

コメント