ファイルシステムオブジェクトによるフォルダ操作(1)

このページでは下表のメソッドについて説明します。これらはすべて FileSystemObject のメソッドになります。

内容 メソッド
フォルダオブジェクト取得 fso.GetFolder
フォルダ存在チェック fso.FolderExists
親フォルダ取得 fso.GetParentFolderName
ドライブ名取得 fso.GetDriveName
フォルダ作成 fso.CreateFolder
スポンサーリンク

使用方法

構文
fso.GetFolder(Path)
fso.FolderExists(Path)
fso.GetParentFolderName(Path)
fso.GetDriveName(Path)
fso.CreateFolder(Path)
引数名 省略 説明
Path × フォルダパスを指定します。 フォルダパスは絶対パス、相対パス、ネットワークパスのいずれも指定可能です。 相対パスを指定した場合はカレントフォルダ(⇒CurDir関数)が基準となります。

各メソッドの説明

fso.GetFolder

引数で指定したフォルダパスのフォルダオブジェクトを返します。フォルダパスは事前に次の fso.FolderExists でチェックしておくとよいでしょう。

Dim fso       As Object
Dim folderObj As Object

Set fso = CreateObject("Scripting.FileSystemObject")
'フォルダオブジェクト取得
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop")

'フォルダオブジェクトに対する処理実施

'オブジェクト変数クリア
Set fso = Nothing
Set folderObj = Nothing

  Setステートメント

fso.FolderExists

引数で指定したフォルダパスの存在チェックを行い、結果を True または False で返します。

Dim fso     As Object

Set fso = CreateObject("Scripting.FileSystemObject")
'フォルダパスチェック
if Not fso.FolderExists("C:\Users\xxx\Desktop") then
    MsgBox "フォルダが存在しません。処理を中止します。"
    End
End If

'オブジェクト変数クリア
Set fso = Nothing

  Setステートメント

fso.GetParentFolderName

引数で指定したフォルダパスの親フォルダを返します。

Dim fso     As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Debug.Print fso.GetParentFolderName("C:\Users\xxx\Desktop")

'オブジェクト変数クリア
Set fso = Nothing

  Setステートメント

fso.GetDriveName

引数で指定したフォルダパスのドライブ名を返します。ネットワーク上のパスを指定した場合は、ネットワーク共有名( ¥¥[サーバー名]¥[共有フォルダ名] )を返却します。

Dim fso     As Object

Set fso = CreateObject("Scripting.FileSystemObject")
Debug.Print fso.GetDriveName("C:\Users\xxx\Desktop")

'オブジェクト変数クリア
Set fso = Nothing

  Setステートメント

上記で解説した fso.GetParentFolderName ~ fso.GetDriveName については単純に特定文字列の抽出を行っているにすぎず、存在しないパスでも正常に処理されてしまいます。

fso.CreateFolder

引数で指定したフォルダを作成します。指定したフォルダが既に存在しているとエラーとなってしまうので、必要に応じて作成するフォルダが存在しないことを確認するとよいでしょう。

次のサンプルは、Desktop フォルダの配下に new フォルダを新規作成する例です。

Dim fso     As Object

Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateFolder("C:\Users\xxx\Desktop\new")

'オブジェクト変数クリア
Set fso = Nothing

  Setステートメント

フォルダのパス情報を表示する例

ローカルPC上のフォルダと、ネットワーク上のフォルダのパス情報を出力する例です。フォルダが存在していればパス情報をイミディエイトウィンドウへすべて表示します。また、CreateObject 関数の戻り値を直接 Withステートメント に指定することで、オブジェクト変数(fso)の宣言と Set ステートメントによる格納の手間を省いています。

Sub sample_fs031_01()
    Dim myPath  As String

    myPath = "C:\Users\Public\vba"
    Call printFolderPathInfo(myPath)

    'ネットワーク上のパスを指定
    myPath = "\\SHARE-PC\share\test\2013"
    Call printFolderPathInfo(myPath)

End Sub

Private Sub printFolderPathInfo(strPath As String)
    Debug.Print ""  '空白行
    Debug.Print "Path     ->" & strPath

    With CreateObject("Scripting.FileSystemObject")
        Debug.Print "Exists   ->" & .FolderExists(strPath)

        If .FolderExists(strPath) Then
            Debug.Print "PFolder  ->" & .GetParentFolderName(strPath)
            Debug.Print "DriveName->" & .GetDriveName(strPath)
        End If
    End With
End Sub

 プロシージャの記述  プロシージャの呼び出し Withステートメント

  • マクロ実行結果(イミディエイトウィンドウ
     
    Path     ->C:¥Users¥Public¥vba
    Exists   ->True
    PFolder  ->C:¥Users¥Public
    DriveName->C:
    
    Path     ->¥¥SHARE-PC¥share¥test¥2013
    Exists   ->True
    PFolder  ->¥¥SHARE-PC¥share¥test
    DriveName->¥¥SHARE-PC¥share

 
ファイルシステムオブジェクトのプロパティ・メソッド
fsoによりファイルのパス情報を表示する

タイトルとURLをコピーしました