トップページ >
Excel >
VBA >
FileSystemObject >
プロパティとメソッド
プロパティとメソッド
FileSystemObjectは最上位のオブジェクトです。FileSystemObjectオブジェクトには次のプロパティとメソッドが用意されています。
・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を参照設定しないと定数は使用できません。
値 | フォルダ |
0 | Windowsがセットアップされているフォルダ |
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 | システムの既定値で開きます |
-1 | ASCIIファイルとして開きます |
0 | Unicodeとして開きます |
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オブジェクト]