Excel VBA

In Excel VBA, a Path works like an address for your computer, telling VBA exactly where a file or folder lives so it can open, save, or organize it correctly.

Path

Path(パス)は、ファイルやフォルダの場所を指定するための重要な要素です。VBAでは、ファイルの読み書きやフォルダ操作などで頻繁に使います。まずは「住所を正しく書く」ことが第一歩です。

ファイルの読み込みと保存

Excel VBAでファイルを読み込んだり保存したりするには、対象ファイルのパスを指定します。下の例は、ファイルを開くときの基本形です(※ご自身のPCに存在する実際のパスに置き換えてください)。

VBA

Dim FilePath As String
FilePath = "C:\Documents\Sample.xlsx" ' ファイルのパスを指定
Workbooks.Open(Filename:=FilePath) ' ファイルを開く

この例では、FilePath にパスを入れて、Workbooks.Open で開いています。パスが間違っていると「ファイルが見つかりません」エラーになります。下は存在チェックとエラーハンドリングを入れた安全版です。

存在チェック+安全版

VBA

Sub OpenWorkbookSafe()
    Dim filePath As String
    filePath = "C:\Documents\Sample.xlsx"

    If Dir(filePath) = "" Then
        MsgBox "ファイルが見つかりません: " & filePath, vbExclamation
        Exit Sub
    End If

    On Error GoTo ErrHandler
    Workbooks.Open filePath
    Exit Sub
ErrHandler:
    MsgBox "開く際にエラーが発生しました: " & Err.Description, vbCritical
End Sub

フォルダの操作

フォルダ内のファイルを一覧表示したり、新しいファイルを作成したりするには、フォルダのパスが必要です。次は一覧表示の基本です(*.* は「すべてのファイル」の意味)。

VBA

Sub ListFilesInFolder()
	Dim FolderPath As String
	Dim FileName As String
	
	FolderPath = "C:\Documents\" ' フォルダのパスを指定
	FileName = Dir(FolderPath & "*.*") ' フォルダ内のファイルを取得
	
	Do While FileName <> ""
		Debug.Print FileName ' ファイル名をデバッグウィンドウに出力
		FileName = Dir ' 次のファイルを取得
	Loop
End Sub

この例では、FolderPath にフォルダのパスを入れ、Dir 関数でファイル名を順番に取得します。Excelファイルだけに絞るなら Dir(FolderPath & "*.xlsx") のようにパターンを変えます。

相対パスと絶対パス

パスには「絶対パス」と「相対パス」があります。絶対パスは住所を最初から最後まで全部書くイメージ、相対パスは「いまいる場所(作業フォルダ)からの道順」を書くイメージです。初学者はまず絶対パスでつまずかないことを優先すると安心です。

絶対/相対のイメージ

VBA

' 絶対パスの例
Workbooks.Open "C:\Users\Me\Documents\Book1.xlsx"

' 相対パス(現在の作業フォルダからの道順)
ChDir "C:\Users\Me\Documents"
Workbooks.Open "Sub\Book1.xlsx"

よく使う Path プロパティ

現在開いているブックから安全にフォルダを辿るには、次のプロパティが便利です。

ThisWorkbook.Path
このコードが入っているブックのあるフォルダ
ActiveWorkbook.Path
いまアクティブなブックのあるフォルダ

ThisWorkbook.Path を使って隣のファイルを開く

VBA

Sub OpenSibling()
    Dim base As String, target As String
    base = ThisWorkbook.Path
    If Right$(base, 1) <> "\" Then base = base & "\"
    target = base & "Data\Book1.xlsx"
    If Dir(target) = "" Then
        MsgBox "見つかりません: " & target, vbExclamation
        Exit Sub
    End If
    Workbooks.Open target
End Sub

パス連結のコツ(\ の有無)

末尾に \ を二重・重複させたり、逆に付け忘れたりするとパスが壊れます。素直に判定して補うか、FileSystemObjectBuildPath を使うと安全です。

FSO.BuildPath で安全に連結

VBA

Function JoinPath(ByVal base As String, ByVal leaf As String) As String
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    JoinPath = fso.BuildPath(base, leaf)
End Function

Pathは、Excel VBAでファイルやフォルダを操作する際に不可欠です。存在チェック・エラー対策・安全な連結をセットで覚えると、実務でもつまずきにくくなります。