トップページ >
Excel >
VBA >
FileSystemObject >
Folderオブジェクト
Folderオブジェクト
Folderオブジェクトはフォルダを表します。Folderオブジェクトの集合はFoldersコレクションです。FoldersコレクションのプロパティはCountプロパティとItemプロパティだけで、メソッドはありません。Folderオブジェクトには次のプロパティとメソッドが用意されています。
・Attributesプロパティ - 書式:Folder.Attributes
フォルダの属性を設定/取得します。
属性を操作するときは次の値を使います。
| 値 | 属性 |
| 0 | 標準ファイル |
| 1 | 読み取り専用ファイル |
| 2 | 隠しファイル |
| 4 | システムファイル |
| 8 | ディスクドライブボリュームラベル(取得のみ可能) |
| 16 | フォルダまたはディレクトリ(取得のみ可能) |
| 32 | アーカイブファイル |
| 64 | リンクまたはショートカット(取得のみ可能) |
| 128 | 圧縮ファイル(取得のみ可能) |
属性を設定するときは、設定したい属性を表す値の合計をAttributesプロパティに設定します。たとえば「読み取り専用」と「隠しフォルダ」の属性を設定するときは、Attributes =
1 + 2 または Attributes =
3とします。
取得した属性の種類を判定するときは、返り値の数値と、属性を表す値の論理和をAnd演算子でとります。たとえば「読み取り専用」の「フォルダ」かどうかをは、Attributes And
1 + 2 または Attributes And
3がTrueかどうかを調べます。
Sub test38()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダに「読み取り専用」「隠しフォルダ」の属性を設定します
If Not FSO.GetFolder("C:\Work").Attributes And (1 + 2) Then
FSO.GetFolder("C:\Work").Attributes = 1 + 2
End If
Set FSO = Nothing
End Sub
・DateCreatedプロパティ - 書式:Folder.DateCreated
フォルダが作成された日付と時刻を返します。
返り値は文字列です。
Sub test39()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダが作成された日時を表示します
MsgBox FSO.GetFolder("C:\Work").DateCreated
Set FSO = Nothing
End Sub
・DateLastAccessedプロパティ - 書式:Folder.DateLastAccessed
フォルダが最後にアクセスされたときの日付と時刻を返します。
返り値は文字列です。
Sub test40()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダに最後にアクセスした日時を表示します
MsgBox FSO.GetFolder("C:\Work").DateLastAccessed
Set FSO = Nothing
End Sub
・DateLastModifiedプロパティ - 書式:Folder.DateLastModified
フォルダが最後に更新されたときの日付と時刻を返します。
返り値は文字列です。
Sub test41()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダが最後に更新された日時を表示します
MsgBox FSO.GetFolder("C:\Work").DateLastModified
Set FSO = Nothing
End Sub
・Driveプロパティ - 書式:Folder.Drive
フォルダが存在するドライブの名前を返します。
Sub test42()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''「C:」を表示します
MsgBox FSO.GetFolder("C:\Work").Drive
Set FSO = Nothing
End Sub
・Filesプロパティ - 書式:Folder.Files
フォルダ内に存在する全てのファイルを返します。
返り値は全ての
Fileオブジェクトを含むFilesコレクションです。
Sub test43()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダ内に保存されているファイルの個数を表示します
MsgBox FSO.GetFolder("C:\Work").Files.Count
Set FSO = Nothing
End Sub
・IsRootFolderプロパティ - 書式:Folder.IsRootFolder
フォルダがルートフォルダかどうかをTrueまたはFalseで返します。
Sub test44()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''ルートフォルがどうかを表示します
If FSO.GetFolder("C:\Work").IsRootFolder Then
MsgBox "ルートフォルダです"
Else
MsgBox "ルートフォルダではありません"
End If
Set FSO = Nothing
End Sub
・Nameプロパティ - 書式:Folder.Name
フォルダの名前を設定/取得します。
すでに存在する同じ名前に設定しようとするとエラーになります。
Sub test45()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダの名前をWork2に変更します
FSO.GetFolder("C:\Work").Name = "Work2"
Set FSO = Nothing
End Sub
・ParentFolderプロパティ - 書式:Folder.ParentFolder
フォルダの親フォルダ名を返します。
Sub test46()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''「C:\Work」を表示します
MsgBox FSO.GetFolder("C:\Work\Sub").ParentFolder
Set FSO = Nothing
End Sub
・Pathプロパティ - 書式:Folder.Path
フォルダのパスを返します。
Sub test47()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''「C:\Work」を表示します
MsgBox FSO.GetFolder("C:\Work").Path
Set FSO = Nothing
End Sub
・ShortNameプロパティ - 書式:Folder.ShortName
8.3形式のフォルダ名を返します。
8.3形式のフォルダ名では空白が使用できず、半角で8文字までしか使用できません。
Sub test48()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''「MICROS~2」と表示されます
MsgBox FSO.GetFolder("C:\Program Files\Microsoft Office").ShortName
Set FSO = Nothing
End Sub
・ShortPathプロパティ - 書式:Folder.ShortPath
8.3形式のパスを返します。
8.3形式のフォルダ名では空白が使用できず、半角で8文字までしか使用できません。
Sub test49()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''「C:\PROGRA~1\MICROS~2」と表示されます
MsgBox FSO.GetFolder("C:\Program Files\Microsoft Office").ShortPath
Set FSO = Nothing
End Sub
・Sizeプロパティ - 書式:Folder.Size
フォルダ内に存在する全てのファイルの合計サイズを返します。
Sub test50()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダ内の全ファイルの合計サイズを表示します
MsgBox FSO.GetFolder("C:\Work").Size
Set FSO = Nothing
End Sub
・SubFoldersプロパティ - 書式:Folder.SubFolders
フォルダ内に存在する全てのサブフォルダを返します。
返り値は全てのFolderオブジェクトを含むFoldersコレクションです。
Sub test51()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダ内に存在するサブフォルダの個数を表示します
MsgBox FSO.GetFolder("C:\Work").SubFolders.Count
Set FSO = Nothing
End Sub
・Typeプロパティ - 書式:Folder.Type
フォルダの種類を返します。
Sub test52()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''「ファイル フォルダ」と表示されます
MsgBox FSO.GetFolder("C:\Work").Type
Set FSO = Nothing
End Sub
・Copyメソッド - 書式:Folder.Copy destination[, overwrite]
フォルダまたはフォルダ内の全ファイルをコピーします。
引数destinationにはコピー先のパスを指定します。引数destinationの最後に
\がないときは、コピー元フォルダ内存在する全ファイルを引数destinationで指定したフォルダにコピーします。引数destinationの最後が
\で終わるときは、コピー元フォルダを引数destinationで指定したフォルダのサブフォルダとしてコピーします。
引数overwriteは省略可能です。
Trueを指定すると既存のフォルダやファイルを上書きします。
Falseを指定すると上書きせずにエラーになります。省略すると
Trueが指定されたとみなされます。
FolderオブジェクトのCopyメソッドは、FileSystemObjectオブジェクトの
CopyFolderメソッドと同じ働きをします。
Sub test53()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダ内の全ファイルをC:\Tmpフォルダにコピーします
FSO.GetFolder("C:\Work").Copy "C:\Tmp"
''C:\WorkフォルダをC:\Tmpフォルダのサブフォルダとしてコピーします
FSO.GetFolder("C:\Work").Copy "C:\Tmp\"
Set FSO = Nothing
End Sub
・CreateTextFileメソッド - 書式:Folder.CreateTextFile(filename[, overwrite[, unicode]])
指定したファイル名を作成し、TextStreamオブジェクトを返します。
引数filenameには作成するファイル名を指定します。
引数overwriteは省略可能です。すでに同名ファイルが存在した場合に上書きするときは
Trueを指定します。省略するとTrueとみなされます。
引数unicodeは省略可能です。
Trueを指定するとUnicodeで作成します。
Falseを指定するとASCIIファイルを作成します。省略するとFalseとみなされます。
引数overwriteにFalseを指定した場合、引数filenameに存在するファイル名を指定するとエラーになります。
CreateTextFileメソッドを実行すると、サイズ0のテキストファイルがただちに作成されます。
FolderオブジェクトのCreateTextFileメソッドは、FileSystemObjectオブジェクトの
CreateTextFileメソッドと同じ働きをします。
Sub test54()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\WorkフォルダにSample.txtを作成して現在の日時を書き込みます
With FSO.GetFolder("C:\Work").CreateTextFile("Sample.txt")
.WriteLine Now
End With
Set FSO = Nothing
End Sub
・Deleteメソッド - 書式:Folder.Delete force
指定したフォルダと、そのフォルダ内の全てのファイルを削除します。
引数folderspecには削除するフォルダの名前を指定します。存在しないフォルダ名を指定するとエラーになります。フォルダが存在するかどうか調べるには、FileSystemObjectオブジェクトの
FolderExistsメソッドを使います。
引数forceは省略可能です。
Trueを指定すると読み取り専用ファイルも削除されます。省略すると
Falseとみなされます。
Deleteメソッドは、まずフォルダ内の全てのファイルを削除してからフォルダを削除しようとします。フォルダ内に読み取り専用ファイルが存在し、引数forceにFalseを指定した場合、読み取り専用ファイルを削除しようとした時点でエラーが発生します。エラーが発生する前に、読み取り専用でないファイルが削除されることもあります。ちなみに、存在しないフォルダ名を指定したときのエラーコードは
76で、読み取り専用ファイルを削除できなかったときのエラーコードは
70です。ファイルの属性を調べるには、Fileオブジェクトの
Attributesプロパティを使います。
FolderオブジェクトのDeleteメソッドは、FileSystemObjectオブジェクトの
DeleteFolderメソッドと同じ働きをします。
Sub test55()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\Workフォルダを削除します
FSO.GetFolder("C:\Work").Delete
Set FSO = Nothing
End Sub
・Moveメソッド - 書式:Folder.Move destination
フォルダを、引数destinationに移動します。
FolderオブジェクトのMoveメソッドは、FileSystemObjectオブジェクトの
MoveFolderメソッドと同じ働きをします。
Sub test56()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
''C:\WorkフォルダをC:Tmpフォルダに移動します
FSO.GetFolder("C:\Work").Move "C:\Tmp\"
Set FSO = Nothing
End Sub
[Driveオブジェクト]戻る← | →進む[Fileオブジェクト]