Excel VBAでオブジェクト指向プログラミング(FSO編)
■FileSystemObject(FSO)とは
FileSystemObject(FSO)はMicrosoftから提供されている、ファイルシステムへのアクセスに特化したオブジェクトで、さまざまな下位オブジェクト(サブクラス)やメソッドがあります。
操作対象によって大別すると、ドライブ関連、フォルダ関連、ファイル関連、テキストファイル関連の4グループに分かれており、提供されているメソッドは下表の通りです。
⇒詳細はMicrosoftのサイト(FileSystemObject オブジェクト)を参照して下さい。
ドライブ関連のメソッド
項目 | 説明 |
---|---|
GetDriveメソッド | 指定したドライブのDriveオブジェクトを返す |
GetDriveNameメソッド | 指定したパスのドライブ名を返す |
DriveExistsメソッド | 指定したドライブが存在するかどうかを返す |
フォルダ関連のメソッド
項目 | 説明 |
---|---|
CreateFolderメソッド | フォルダを作成し、Folderオブジェクトを返す |
GetFolderメソッド | 指定したフォルダのFolderオブジェクトを返す |
GetSpecialFolderメソッド | 指定した特殊フォルダのFolderオブジェクトを返す |
GetParentFolderNameメソッド | 指定したフォルダの親フォルダ名を返す |
FolderExistsメソッド | 指定したフォルダが存在するかどうかを返す |
CopyFolderメソッド | フォルダをコピーする(戻り値なし) |
DeleteFolderメソッド | フォルダを削除する(戻り値なし) |
MoveFolderメソッド | フォルダを移動する(戻り値なし) |
ファイル関連のメソッド
項目 | 説明 |
---|---|
GetFileメソッド | 指定したファイルのFileオブジェクトを返す |
BuildPathメソッド | パスとファイル名から生成したパスを返す |
GetAbsolutePathNameメソッド | 省略したパスから完全なパスを返す |
GetBaseNameメソッド | パスからファイル名のベース名(※)を返す (※)ファイル名から拡張子を除いた部分 |
GetExtensionNameメソッド | パスからファイル名の拡張子を返す |
GetFileNameメソッド | パスからファイル名を返す |
GetFileVersionメソッド | 指定したファイルのバージョンを返す |
GetTempNameメソッド | 生成した一時ファイル名を返す |
FileExistsメソッド | 指定したファイルが存在するかどうかを返す |
CopyFileメソッド | ファイルをコピーする(戻り値なし) |
DeleteFileメソッド | ファイルを削除する(戻り値なし) |
MoveFileメソッド | ファイルを移動する(戻り値なし) |
テキストファイル関連のメソッド
項目 | 説明 |
---|---|
CreateTextFileメソッド | テキストファイルを作成し、TextStreamオブジェクトを返す |
OpenTextFileメソッド | テキストファイルをオープンし、TextStreamオブジェクトを返す |
GetStandardStreamメソッド | 標準入出力をオープンし、TextStreamオブジェクトを返す(VBAでは使用不可) |
■FSOを使用するための事前準備
FSOを使用するための事前準備は、以下の3ステップです。
⇒オブジェクトを使用するための事前準備とオブジェクトブラウザによる調査方法については、Excel VBAでオブジェクト指向プログラミング(事前準備編)を参照して下さい。
①ライブラリの参照設定
Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでMicrosoft Scripting Runtimeのチェックボックスにチェックを入れ、[OK]ボタンを押下。
②オブジェクト変数の定義
プログラムの宣言部でオブジェクト変数を定義。
- Dim fso As Object
③インスタンスの生成
プログラムの処理部でインスタンスを生成。
- Set fso = New FileSystemObject
- 'ここにオブジェクトを使用した処理を記述
- Set fso = Nothing
(参考)「Set fso = New FileSystemObject」の部分を「Set fso = CreateObject(“Scripting.FileSystemObject")」と記述すれば、ステップ①(ライブラリの参照設定)は不要です。
次項以降ではドライブ関連の操作、フォルダ関連の操作、ファイル関連の操作について、もう少し詳しく説明します。
■ドライブ関連の操作
FSOでドライブ関連の操作を行うためには、FSOのドライブ関連のメソッドおよびDriveオブジェクトを使用します。
Driveオブジェクトの取得方法
①GetDriveメソッドによる取得
FSOのGetDriveメソッドにより取得する方法です。
- Dim fso As Object
- Dim drive As Object
- Private Sub Sample1()
- Set fso = New FileSystemObject
- Set drive = fso.GetDrive(“c:")
- 'ここにDriveオブジェクトを使用した処理を記述
- Set drive = Nothing
- Set fso = Nothing
- End Sub
②Drivesコレクションによる取得
FSOのDrivesプロパティにより、利用可能な全てのドライブの集合体であるDrivesコレクションを使用して取得する方法です。
- Dim fso As Object
- Dim drive As Object
- Private Sub Sample2()
- Set fso = New FileSystemObject
- For Each drive In fso.drives
- 'ここにDriveオブジェクトを使用した処理を記述
- Next drive
- Set fso = Nothing
- End Sub
Driveオブジェクトのプロパティ
項目 | 説明 |
---|---|
AvailableSpaceプロパティ | 当該ドライブの使用可能な容量を返す |
DriveLetterプロパティ | 当該ドライブのドライブ文字を返す |
DriveTypeプロパティ | 当該ドライブの種類を返す |
FileSystemプロパティ | 当該ドライブのファイルシステムの種類を返す |
FreeSpaceプロパティ | 当該ドライブの空き容量を返す |
IsReadyプロパティ | 当該ドライブが使用可能かどうかを返す |
Pathプロパティ | 当該ドライブのパスを返す |
RootFolderプロパティ | 当該ドライブのルートフォルダを返す |
SerialNumberプロパティ | 当該ドライブのシリアル番号を返す |
ShareNameプロパティ | 当該ドライブの共有名を返す |
TotalSizeプロパティ | 当該ドライブの全体の容量を返す |
VolumeNameプロパティ | 当該ドライブのボリューム名を返す |
■フォルダ関連の操作
FSOでフォルダ関連の操作を行うためには、FSOのフォルダ関連のメソッドやFolderオブジェクトのメソッドおよびプロパティを使用します。
Folderオブジェクトの取得方法
①GetFolderメソッドによる取得
FSOのGetFolderメソッドにより取得する方法です。
- Dim fso As Object
- Dim folder As Object
- Private Sub Sample3()
- Set fso = New FileSystemObject
- Set folder = fso.GetFolder(“c:\work")
- 'ここにFolderオブジェクトを使用した処理を記述
- Set folder = Nothing
- Set fso = Nothing
- End Sub
②Foldersコレクションによる取得
指定したフォルダのサブフォルダを取得する場合、FolderオブジェクトのSubFoldersプロパティにより、サブフォルダの集合体であるFoldersコレクションを使用して取得する方法です。
- Dim fso As Object
- Dim subfolders As Object
- Dim folder As Object
- Private Sub Sample4()
- Set fso = New FileSystemObject
- Set subfolders = fso.GetFolder(“c:\work").subfolders
- For Each folder In subfolders
- 'ここにFolderオブジェクトを使用した処理を記述
- Next folder
- Set folder = Nothing
- Set fso = Nothing
- End Sub
Folderオブジェクトのメソッド
項目 | 説明 |
---|---|
Copyメソッド | 当該フォルダをコピーする |
CreateTextFileメソッド | テキストファイルを作成する |
Deleteメソッド | 当該フォルダを削除する |
Moveメソッド | 当該フォルダを移動する |
Folderオブジェクトのプロパティ
項目 | 説明 |
---|---|
Attributesプロパティ | 当該フォルダの属性を返す |
DateCreatedプロパティ | 当該フォルダの作成日時を返す |
DateLastAccessedプロパティ | 当該フォルダの最終アクセス日時を返す |
DateLastModifiedプロパティ | 当該フォルダの最終更新日時を返す |
Driveプロパティ | 当該フォルダを含むDriveオブジェクトを返す |
Filesプロパティ | 当該フォルダのFilesコレクションを返す |
IsRootFolderプロパティ | 当該フォルダがルートフォルダかどうかを返す |
Nameプロパティ | 当該フォルダのフォルダ名を返す |
ParentFolderプロパティ | 親フォルダのFolderオブジェクトを返す |
Pathプロパティ | 当該フォルダのパスを返す |
ShortNameプロパティ | 当該フォルダの8.3形式のフォルダ名を返す |
ShortPathプロパティ | 当該フォルダの8.3形式のパスを返す |
Sizeプロパティ | 当該フォルダの合計サイズを返す |
SubFoldersプロパティ | 当該フォルダのSubFoldersコレクションを返す |
Typeプロパティ | 当該フォルダの種類を返す |
■ファイル関連の操作
FSOでファイル関連の操作を行うためには、FSOのファイル関連のメソッドやFileオブジェクトのメソッドおよびプロパティを使用します。
Fileオブジェクトの取得方法
①GetFileメソッドによる取得
FSOのGetFileメソッドにより取得する方法です。
- Dim fso As Object
- Dim file As Object
- Private Sub Sample5()
- Set fso = New FileSystemObject
- Set file = fso.GetFile(“c:\work\test.txt")
- 'ここにFileオブジェクトを使用した処理を記述
- Set file = Nothing
- Set fso = Nothing
- End Sub
②Filesコレクションによる取得
指定したフォルダのファイルを取得する場合、FolderオブジェクトのFilesプロパティにより、ファイルの集合体であるFilesコレクションを使用して取得する方法です。
- Dim fso As Object
- Dim files As Object
- Dim file As Object
- Private Sub Sample6()
- Set fso = New FileSystemObject
- Set files = fso.GetFolder(“c:\work").files
- For Each file In files
- 'ここにFileオブジェクトを使用した処理を記述
- Next file
- Set file = Nothing
- Set fso = Nothing
- End Sub
③FoldersコレクションとFilesコレクションの併用
指定したフォルダ配下の全ファイル(指定したフォルダ直下のファイルおよびサブフォルダの中にあるファイル)を処理したい場合は、FoldersコレクションとFilesコレクションを併用して、再帰的に処理を行うのが良いです。
- Dim fso As Object
- Dim folder As Object
- Dim subfolder As Object
- Dim file As Object
- Private Sub Sample7()
- Set fso = New FileSystemObject
- Call Sample7_sub(“c:\work")
- Set fso = Nothing
- End Sub
- Public Sub Sample7_sub(path As String)
- Set folder = fso.GetFolder(path)
- For Each file In folder.Files
- 'ここにFileオブジェクトを使用した処理を記述
- Next file
- For Each subfolder In folder.subfolders
- Call Sample7_sub(subfolder.path)
- Next subfolder
- End Sub
Fileオブジェクトのメソッド
項目 | 説明 |
---|---|
Copyメソッド | 当該ファイルをコピーする |
Deleteメソッド | 当該ファイルを削除する |
Moveメソッド | 当該ファイルを移動する |
OpenAsTextStreamメソッド | テキストファイルをオープンする |
Fileオブジェクトのプロパティ
項目 | 説明 |
---|---|
Attributesプロパティ | 当該ファイルの属性を返す |
DateCreatedプロパティ | 当該ファイルの作成日時を返す |
DateLastAccessedプロパティ | 当該ファイルの最終アクセス日時を返す |
DateLastModifiedプロパティ | 当該ファイルの最終更新日時を返す |
Driveプロパティ | 当該ファイルを含むDriveオブジェクトを返す |
Nameプロパティ | 当該ファイルのファイル名を返す |
ParentFolderプロパティ | 当該ファイルを含むFolderオブジェクトを返す |
Pathプロパティ | 当該ファイルのパスを返す |
ShortNameプロパティ | 当該ファイルの8.3形式のファイル名を返す |
ShortPathプロパティ | 当該ファイルの8.3形式のパスを返す |
Sizeプロパティ | 当該ファイルのサイズを返す |
Typeプロパティ | 当該ファイルの種類を返す |
■FSOを利用したExcelツールの具体例
FSOを利用したExcelツールの具体例については、Excel VBAでオブジェクト指向プログラミング(FSOを利用したExcelツール編)を参照して下さい。
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ
ディスカッション
コメント一覧
まだ、コメントがありません