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(パス)は、ファイルやフォルダの場所を指定するための重要な要素です。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"
現在開いているブックから安全にフォルダを辿るには、次のプロパティが便利です。
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
\
の有無)末尾に \
を二重・重複させたり、逆に付け忘れたりするとパスが壊れます。素直に判定して補うか、FileSystemObject
の BuildPath
を使うと安全です。
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でファイルやフォルダを操作する際に不可欠です。存在チェック・エラー対策・安全な連結をセットで覚えると、実務でもつまずきにくくなります。