ファイルの存在確認
ファイルの存在を確認する方法には、「Dir関数」と「FileSystemObjectのFileExistsメソッド」の2種類があります。探したいファイル名(pathname)をパス付で指定します。構文 | 戻り値 | 特徴 | |
---|---|---|---|
Dir | Dir | 一致する最初のファイル名 | ワイルドカード可能 |
File | FileSystemObject | True(有る) 又は False(無い) | 固定ファイル名のみ |
Dir関数は、第二引数にファイル属性(attributes)を指定でき、属性で絞って探索することが出来ます。
またワイルドカードとして「*(アスタリスク:複数の文字)」 と「?( クエスチョンマーク:1 文字) 」が使用でき、第一引数の無い「Dir()」を続けて実行することで複数のファイル名の存在を確認することが可能です。
Dir関数の一般的な使用例は以下図2となります。
- Sub its001_01()
- Dim Fpath As String '←ファイルのパス
- Dim Fname As String '←ファイル名
- Fpath = ThisWorkbook.Path
- Fname = "Sample.xlsx"
- If Dir(Fpath & "¥" & Fname) = Fname Then
- MsgBox Fname & "は存在します"
- Else
- MsgBox Fname & "は存在しません"
- End If
- End Sub
05~06行目でパス名・ファイル名を指定し、08行目でDir関数を実行します。その戻り値がファイル名(変数Fname)であれば「ファイルは存在する」ことになります。
05行目で指定しているパス名は、ThisWorkbook.Pathと「自分のPC内」のため特にエラーは出ません。しかしこのパスを「社内ファイルサーバ」などを指定すると状況は変わります。
例えばファイルサーバであれば「Fpath = "¥¥Server¥Excel"」等となりますが、サーバー名が間違っていたり、通信が出来ない状態だったりした場合には実行時エラー(エラー番号=52)が発生します(インターネット先と間違えhttps://・・・などとしてしまった場合も同様です)。
ファイルパスの記述ミス等の種類とエラーの出方を図3にまとめます。
パス名の内容 | Err.Number |
---|---|
正常 | 0 |
ドライブ名が違う | 0 |
サーバー名が違う | 52 |
フォルダー名が違う | 0 |
ファイル名が違う | 0 |
URL形式 | 52 |
通信不可 | 52 |
そこで、エラーが出た時は「設定したパスが間違えている」と判断するのが図4です。エラーが出た時には33行目で別なコメントを出します。
- Sub its001_02()
- Dim Fpath As String '←ファイルのパス
- Dim Fname As String '←ファイル名
- Dim buf As String '←Dir関数の戻り値
- Fpath = ThisWorkbook.Path
- Fname = "Sample.xlsx"
- On Error Resume Next
- buf = Dir(Fpath & "¥" & Fname)
- If Not Err.Number = 0 Then
- MsgBox "パス(" & Fpath & ")が間違っています"
- ElseIf buf = Fname Then
- MsgBox Fname & "は存在します"
- Else
- MsgBox Fname & "は存在しません"
- End If
- On Error GoTo 0
- End Sub
FileSystemObjectのFileExistsメソッドでは、引数に指定したファイルが存在するときTrueを返します。FileExistsを使った例は図5になります。
なおFileExistsでは、図3のようにサーバー名や通信不可の場合でもエラーは発生せず、全て「False(ファイルは存在しない)」となるため「On Error Resume Next」でのエラー番号取得・仕訳けは不要となります(逆に、仕訳けが不可能なメソッドとも言えます)。
- Sub its001_03()
- Dim Fpath As String '←ファイルのパス
- Dim Fname As String '←ファイル名
- Dim Fso As Object '←ileSystemObjectオブジェクト
- Fpath = ThisWorkbook.Path
- Fname = "Sample.xlsx"
- Set Fso = CreateObject("Scripting.FileSystemObject")
- If Fso.FileExists(Fpath & "¥" & Fname) Then
- MsgBox Fname & "は存在します"
- Else
- MsgBox Fname & "は存在しません"
- End If
- Set Fso = Nothing
- End Sub
アプリ実例
「ブックを開いた時に自動的にバックアップを取る」「回転させた画像をシートに貼り付ける」
「CSVファイルでデータを読み書きする月間予定表」
「アンケートの回収と集計方法」
「Excelで作った日報をPDFでそのままメール送信」
「共有資料の登録と閲覧ができるサーバーシステム」
「図形カレンダーをクリックし日付入力」
「ExcelからAccessデータベースを作成・操作」