wrote :: 2005.01.18

トップページ > Excel > VBA > FileSystemObject > プロパティとメソッド


プロパティとメソッド

FileSystemObjectは最上位のオブジェクトです。FileSystemObjectオブジェクトには次のプロパティとメソッドが用意されています。

プロパティ
Drivesシステムに接続されたDrivesコレクションを返します
メソッド
BuildPathパスの末尾に、指定したフォルダ名を追加したパスを返します
CopyFileファイルをコピーします
CopyFolderフォルダをコピーします
CreateFolder新しいフォルダを作成します
CreateTextFile新しいテキストファイルを作成します
DeleteFileファイルを削除します
DeleteFolderフォルダを削除します
DriveExistsドライブが存在するかどうか調べます
FileExistsファイルが存在するかどうか調べます
FolderExistsフォルダが存在するかどうか調べます
GetAbsolutePathName省略したパスから完全なパス名を返します
GetBaseName拡張子を除いたファイルのベース名を返します
GetDrive指定したDriveオブジェクトを返します
GetDriveName指定したドライブの名前を返します
GetExtensionNameファイルの拡張子を返します
GetFile指定したFileオブジェクトを返します
GetFileName指定したファイルの名前を返します
GetFolder指定したFolderオブジェクトを返します
GetParentFolderName指定したフォルダの親フォルダを返します
GetSpecialFolderシステムが使用する特別なフォルダのパスを返します
GetTempName一時的なファイル名を生成します
MoveFileファイルを移動します
MoveFolderフォルダを移動します
OpenTextFile指定したTextStreamオブジェクトを返します



・Drivesプロパティ - 書式:FileSystemObject.Drives

システムで使用できる、全てのDriveオブジェクトの集合体であるDrivesコレクションを返します。
Sub test1()
    ''全てのドライブ名を表示します
    Dim FSO, Drv, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    For Each Drv In FSO.Drives
        buf = buf & Drv.DriveLetter & vbCrLf
    Next Drv
    MsgBox buf & "が接続されています"
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・BuildPathメソッド - 書式:FileSystemObject.BuildPath(path, name)

指定したパス(path)の末尾に、新しいフォルダ名(name)を追加したパスを返します。
BuildPathメソッドは、新しいパス名を文字列として生成するだけです。実際に新しいフォルダが作成されるわけではありません。
引数pathに、存在しないパスを指定してもエラーになりません。
Sub test2()
    ''カレントフォルダの後ろに新しいフォルダ名を追加します
    Dim FSO, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    buf = InputBox("新しいフォルダ名は?")
    MsgBox FSO.BuildPath(CurDir, buf)
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・CopyFileメソッド - 書式:FileSystemObject.CopyFile source, destination[, overwrite]

引数sourceに指定したファイルを、引数destinationにコピーします。
引数sourceにはワイルドカードを使用できます。ただし、ワイルドカードに該当するファイルが1つも存在しないとエラーになります。また、ワイルドカードが使えるのはパスの最終要素だけです。C:\Tmp\*.xlsはC:\Tmp\フォルダ内の全てのxlsファイルをコピーしますが、C:\Tmp\*\Book1.xlsはエラーになります。
引数destinationと同じ名前のファイルがすでに存在する場合、引数overwriteにTrueを指定すると上書きし、Falseを指定したときはエラーが発生します。引数overwriteを省略するとTrueとみなされます。
引数destinationが\で終わる文字列の場合は、引数destinationにフォルダが指定されたと解釈され、引数sourceで指定したファイルを引数destinationで指定したフォルダにコピーします。ただし、引数destinationに存在しないフォルダを指定するとエラーになります。
Sub test3()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Tmp\フォルダのBook1.xlsを、C:\Work\フォルダにコピーします
    FSO.CopyFile "C:\Tmp\Book1.xls", "C:\Work\"
    ''C:\Tmp\フォルダのBook1.xlsを、C:\Work\フォルダにSample.xlsという名前でコピーします
    FSO.CopyFile "C:\Tmp\Book1.xls", "C:\Work\Sample.xls"
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・CopyFolderメソッド - 書式:FileSystemObject.CopyFolder source, destination[, overwrite]

引数sourceに指定したフォルダを、引数destinationにコピーします。使い方はCopyFileメソッドと同じです。ワイルドカードも使えます。
Sub test4()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Tmp\フォルダのSubフォルダを、C:\Work\フォルダにコピーします
    FSO.CopyFolder "C:\Tmp\Sub", "C:\Work\"
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・CreateFolderメソッド - 書式:FileSystemObject.CreateFolder(foldername)

新しいフォルダを作成します。
引数foldernameには、作成するフォルダのパスを指定します。すでに存在しているパスを指定するとエラーになります。パスが存在しているかどうかを調べるには、FolderExistsメソッドを使います。
Sub test5()
    ''C:\Work\フォルダにSubフォルダを作成します。
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FSO.CreateFolder "C:\Work\Sub"
    Set FSO = Nothing
End Sub

CreateFolderメソッドは、指定したフォルダの作成に成功すると、作成したフォルダのパスを文字列で返します。また、すでに存在しているフォルダや、不正な名前のフォルダを作成しようとするとエラーになりますが、どんなエラーが発生したかはErrオブジェクトのNumberプロパティで判定できます。次のコードは、C:\Workフォルダに、ユーザーがInputBoxで指定した名前のフォルダを作成します。作成に成功すると、作成したフォルダのパスを表示し、失敗した場合はエラーの内容を表示します。
Sub test5_2()
    ''C:\Work\フォルダにユーザーが指定した名前のフォルダを作成します。
    Dim FSO, buf As String, Result As String
    buf = InputBox("C:\Workに作成するフォルダ名を入力してください")
    If buf = "" Then Exit Sub
    Set FSO = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
    Result = FSO.CreateFolder("C:\Work\" & buf)
    Set FSO = Nothing
    If Err = 0 Then
        MsgBox Result & vbCrLf & "を作成しました", vbInformation
    Else
        MsgBox Err.Description, vbExclamation
    End If
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・CreateTextFileメソッド - 書式:FileSystemObject.CreateTextFile(filename[, overwrite[, unicode]])

指定したファイル名を作成し、TextStreamオブジェクトを返します。
引数filenameには作成するファイル名を指定します。
引数overwriteは省略可能です。すでに同名ファイルが存在した場合に上書きするときはTrueを指定します。省略するとTrueとみなされます。
引数unicodeは省略可能です。Trueを指定するとUnicodeで作成します。Falseを指定するとASCIIファイルを作成します。省略するとFalseとみなされます。
引数overwriteにFalseを指定した場合、引数filenameに存在するファイル名を指定するとエラーになります。
CreateTextFileメソッドを実行すると、サイズ0のテキストファイルがただちに作成されます。
Sub test6()
    ''C:\Work\フォルダにSample.txtを作成して現在の日時を書き込みます
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    With FSO.CreateTextFile("C:\Work\Sample.txt")
        .WriteLine Now
        .Close
    End With
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・DeleteFileメソッド - 書式:FileSystemObject.DeleteFile filespec[, force]

ファイルを削除します。
引数filespecには削除するファイル名を指定します。ワイルドカードも使えますが、ワイルドカードを指定できるのはパスの最終要素だけです。また、存在しないファイル名を指定するとエラーになります。ファイルが存在するかどうか調べるにはFileExistsメソッドを使います。
引数forceは省略可能です。Trueを指定すると読み取り専用ファイルも削除されます。省略するとFalseとみなされます。
Sub test7()
    ''C:\Work\Sample.txtを削除します
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FSO.DeleteFile "C:\Work\Sample.txt"
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・DeleteFolderメソッド - 書式:FileSystemObject.DeleteFolder folderspec[, force]

指定したフォルダと、そのフォルダ内の全てのファイルを削除します。
引数folderspecには削除するフォルダの名前を指定します。存在しないフォルダ名を指定するとエラーになります。フォルダが存在するかどうか調べるにはFolderExistsメソッドを使います。
引数forceは省略可能です。Trueを指定すると読み取り専用ファイルも削除されます。省略するとFalseとみなされます。
DeleteFolderメソッドは、まずフォルダ内の全てのファイルを削除してからフォルダを削除しようとします。フォルダ内に読み取り専用ファイルが存在し、引数forceにFalseを指定した場合、読み取り専用ファイルを削除しようとした時点でエラーが発生します。エラーが発生する前に、読み取り専用でないファイルが削除されることもあります。ちなみに、存在しないフォルダ名を指定したときのエラーコードは76で、読み取り専用ファイルを削除できなかったときのエラーコードは70です。ファイルの属性を調べるには、FileオブジェクトのAttributesプロパティを使います。
Sub test8()
    ''C:\Work\フォルダを削除します
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FSO.DeleteFolder "C:\Work"
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・DriveExistsメソッド - 書式:FileSystemObject.DriveExists(drivespec)

指定したドライブが存在するかどうかを調べます。存在する場合はTrueを返します。。
引数drivespecには存在を調べるドライブ名またはパス名を指定します。
FDやCD-ROMドライブのようなリムーバブルドライブの場合、ドライブの準備ができていなくてもドライブが存在すればTrueが返ります。ドライブの準備ができているかどうかを調べるにはDriveオブジェクトのIsReadyプロパティを使います。
Sub test9()
    ''Dドライブが存在するかどうか調べます
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.DriveExists("E") Then
        MsgBox "Eドライブが存在します"
    Else
        MsgBox "Eドライブは存在しません"
    End If
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・FileExistsメソッド - 書式:FileSystemObject.FileExists(filespec)

ファイルが存在するかどうか調べます。存在する場合はTrueを返します。
引数filespecには存在を調べるファイル名を指定します。
Sub test10()
    ''C:\Work\Sample.txtが存在するかどうか調べます
    Dim FSO, Target As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Target = "C:\Work\Sample.txt"
    If FSO.FileExists(Target) Then
        MsgBox Target & "が存在します"
    Else
        MsgBox Target & "は存在しません"
    End If
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・FolderExistsメソッド - 書式:FileSystemObject.FolderExists(folderspec)

フォルダが存在するかどうか調べます。存在する場合はTrueを返します。
引数folderspecには存在を調べるフォルダ名を指定します。相対パスを指定することも可能です。相対パスでは、「.」がカレントフォルダを示し、「..」はカレントフォルダの親フォルダを表します。たとえば、カレントフォルダが「C:\Work\Job」だった場合、「.\Sub」は「C:\Work\Job\Sub」を表し、「..\Sub」は「C:\Work\Sub」を表します。
Sub test11()
    ''Subフォルダが存在するかどうか調べます
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FolderExists("..\Sub") Then
        MsgBox "Subフォルダが存在します"
    Else
        MsgBox "Subフォルダは存在しません"
    End If
    Set FSO = Nothing
End Sub

(ページの先頭へ戻る)

・GetAbsolutePathNameメソッド - 書式:FileSystemObject.GetAbsolutePathName(pathspec)

省略したパスから完全なパス名を返します。
引数pathspecには省略形のパスを指定します。パスの区切りには\だけでなく/も使用できます。
Sub test12()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''カレントフォルダがC:\Work\Job\Subだったとき
    ''C:\Workを返します
    MsgBox FSO.GetAbsolutePathName("../..")
    ''C:\を返します
    MsgBox FSO.GetAbsolutePathName("\")
    ''C:\Work\Reportを返します
    MsgBox FSO.GetAbsolutePathName("..\..\Report")
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetBaseNameメソッド - 書式:FileSystemObject.GetBaseName(path)

ファイルのベース名を返します。ベース名とは、ファイル名のうち拡張子(ピリオドを含む)を除く文字列です。
引数pathにはファイル名を指定します。
ファイル名のうち拡張子だけを取得するにはGetExtensionNameプロパティを使います。
Sub test13()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Book1を返します
    MsgBox FSO.GetBaseName("C:\Work\Book1.xls")
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetDriveメソッド - 書式:FileSystemObject.GetDrive drivespec

指定したドライブを表すDriveオブジェクトを返します。
引数drivespecには、「C」「C:」「C:\」のいずれかの形式でドライブ名を指定します。
下のサンプルでは、GetDriveメソッドで取得したDriveオブジェクトを変数Drvに格納しています。MsgBoxでは、変数に格納したDriveオブジェクトのDriveLetterプロパティを参照しています。実は、MsgBox Drvとしても正常に機能しますが、それはDriveオブジェクトで標準のプロパティがDriveLetterプロパティだからです。GetDriveメソッドの返り値は「C」などの文字列ではなくオブジェクトですので注意してください。
Sub test14()
    Dim FSO, Drv
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Cを返します
    Set Drv = FSO.GetDrive("C:\")
    MsgBox Drv.DriveLetter
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetDriveNameメソッド - 書式:FileSystemObject.GetDriveName(path)

ドライブを表す文字を返します。
引数pathにはドライブ名を含むパスを指定します。指定するパスは実在しなくてもかまいません。たとえば、存在しない「G:\tanaka\toru」を指定すると、\から左の「G:」を返します。パスとして認識できない「tanaka_toru」のような文字列を指定すると、""を返します。
DriveオブジェクトのDriveLetterプロパティが返すのは「C」のようなアルファベットですが、GetDriveNameメソッドは「C:」とコロンも含むので注意してください。
Sub test15()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:を返します
    MsgBox FSO.GetDriveName("C:\")
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetExtensionNameメソッド - 書式:FileSystemObject.GetExtensionName(path)

ファイルの拡張子を返します。ピリオドは含みません。
引数pathにはファイル名を指定します。
ファイル名のうち拡張子を除くベース名を取得するにはGetBaseNameプロパティを使います。
Sub test16()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''xlsを返します
    MsgBox FSO.GetExtensionName("C:\Work\Book1.xls")
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetFileメソッド - 書式:FileSystemObject.GetFile(filespec)

指定したファイルを表すFileオブジェクトを返します。
引数filespecにはファイル名を含むパスを指定します。
Sub test17()
    Dim FSO, FileObject
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Book1.xlsのサイズを返します
    Set FileObject = FSO.GetFile("C:\Book1.xls")
    MsgBox FileObject.Size
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetFileNameメソッド - 書式:FileSystemObject.GetFileName(pathspec)

指定したパスのうち、ファイル名とみなされる最終要素を返します。
引数pathspecにはファイル名を含むパスを指定します。指定するパスは実在しなくてもかまいません。たとえば、存在しない「G:\tanaka\toru.txt」を指定すると、最終要素の「toru.txt」を返します。
Sub test18()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Book1.xlsを返します
    MsgBox FSO.GetFileName("C:\Work\Book1.xls")
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetFolderメソッド - 書式:FileSystemObject.GetFolder(folderspec)

指定したフォルダを表すFolderオブジェクトを返します。
引数folderspecにはフォルダのパスを指定します。存在しないパスを指定するとエラーになります。
Sub test19()
    Dim FSO, FolderObject
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Work\フォルダ内にさるサブフォルダの個数を表示します
    Set FolderObject = FSO.GetFolder("C:\Work\")
    MsgBox FolderObject.SubFolders.Count
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetParentFolderNameメソッド - 書式:FileSystemObject.GetParentFolderName(path)

指定したフォルダの親フォルダ名を文字列で返します。
引数pathには親フォルダを調べるパスを指定します。指定するパスは実在しなくてもかまいません。たとえば、存在しない「G:\tanaka\toru\」を指定すると、\で区切られた最終要素から2番目の「G:\tanaka」を返します。
Sub test20()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Workという文字列を返します
    MsgBox FSO.GetParentFolderName("C:\Work\Sub\")
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetSpecialFolderメソッド - 書式:FileSystemObject.GetSpecialFolder(folderspec)

システムが使用する特別なフォルダを表すFolderオブジェクトを返します。
引数folderspecには取得するフォルダを表す次の値を指定します。ヘルプではWindowsFolderやSystemFolderなどの定数が使えると書かれていますが、FileSystemObjectを提供するMicrosoft Scripting Runtimeを参照設定しないと定数は使用できません。

フォルダ
0Windowsがセットアップされているフォルダ
1システムファイルが格納されているフォルダ
2一時ファイルの格納用フォルダ

Sub test21()
    Dim FSO, FolderObject
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''Windowsフォルダ内に存在するファイルの個数を表示します
    Set FolderObject = FSO.GetSpecialFolder(0)
    MsgBox FolderObject.Files.Count
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・GetTempNameメソッド - 書式:FileSystemObject.GetTempName

一時ファイルの名前に使えるランダムなファイル名を生成します。
生成されるのは「rad3957B.tmp」のようなファイル名です。拡張子は「tmp」です。
Sub test22()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''ランダムなファイル名を表示します
    MsgBox FSO.GetTempName
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・MoveFileメソッド - 書式:FileSystemObject.MoveFile source, destination

引数sourceに指定したファイルを、引数destinationに移動します。
引数sourceの最終要素にはワイルドカードを使用できます。詳しくはCopyFileメソッドをご覧ください。
引数destinationにすでに同名ファイルが存在する場合はエラーになります。
引数sourceに指定したファイルが読み取り専用でも移動されます。
Sub test23()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Tmp\フォルダ内の*.xlsをC:\Work\フォルダに移動します
    FSO.MoveFile "C:\Tmp\*.xls", "C:\Work\"
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・MoveFolderメソッド - 書式:FileSystemObject.MoveFolder source, destination

引数sourceに指定したフォルダを、引数destinationに移動します。
引数sourceの最終要素にはワイルドカードを使用できます。詳しくはCopyFileメソッドをご覧ください。
Sub test24()
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Tmp\Sub\フォルダをC:\Work\フォルダに移動します
    FSO.MoveFolder "C:\Tmp\Sub", "C:\Work\"
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)

・OpenTextFileメソッド - 書式:FileSystemObject.OpenTextFile(filename[, iomode[, create[, format]]])

テキストファイルを開き、開いたTextStreamオブジェクトを返します。
引数filenameには開くファイル名を指定します。
引数iomodeは省略可能です。読み込みまたは書き込みを表す値を指定します。読み込みは1、書き込みは2、ファイルの最後に追記するときは8を指定します。省略すると読み込みの1が指定されたとみなされます。
引数createは省略可能です。引数filenameで指定したファイルが存在しない場合、新たに作成するときはTrueを、新たに作成しないときはFalseを指定します。省略するとFalseが指定されたものとみなされます。
引数formatは省略可能です。開くファイルの形式を指定します。指定できるのは次の値です。省略するとASCIIファイルとして開かれます。

形式
-2システムの既定値で開きます
-1ASCIIファイルとして開きます
0Unicodeとして開きます

Sub test25()
    Dim FSO, TextFile, buf As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Work\Sample.txtを開いて内容を表示します
    Set TextFile = FSO.OpenTextFile("C:\Work\Sample.txt")
    buf = TextFile.ReadAll
    MsgBox buf
    Set FSO = Nothing
End Sub
(ページの先頭へ戻る)



[使い方]戻る← | →進む[Driveオブジェクト]