FileSystemObject は FSO とも呼ばれ、コンピューターのファイル システムにアクセスするための簡単なオブジェクト ベースのモデルを提供します。 VBA で FileSystemObject のインスタンスを作成するだけで、ファイルの生成、ファイルの読み取り、ファイルの削除、フォルダー内の繰り返し処理、およびコンピューターのファイル システムに対する他の多くの操作を行うことができます。 このDLLはTextStreamオブジェクトを使用したファイルの作成と操作をサポートしており、これがFSOがバイナリファイルに対する操作をサポートしない理由です。
目次
File System Object の用途
FileSystemObject は次のような複数のタスクで使用できます:
- テキストファイルの作成、オープン、読み取り、書き込み、および削除。
- フォルダーの作成、変更、および削除。
- ファイルおよびフォルダーの反復処理。
FileSystemObjectへのアクセス
FileSystemObjectはいくつかのオブジェクトコレクションからなり、これらのオブジェクトコレクションのそれぞれはファイルシステムの特定の側面に関する情報を含んでいます。 これらのコレクションは次のとおりです:
Object | Description |
---|---|
Drive | このオブジェクトによりシステムに接続されたドライブに関する情報を取得することができます。 例えば、ドライブで利用可能なスペース、論理名などを知ることができます。 ここでいうドライブ・オブジェクトは必ずしもハードディスクを意味するわけではなく、CD-ROM、フラッシュ・ドライブ、RAM、あるいはLAN経由で論理的に接続されたドライブである場合もあることに注意してください。 |
Folder | このオブジェクトは、フォルダ階層を作成、削除、移動、または照会することができます。 |
File | このオブジェクトは、Fileを作成、削除、移動、または照会することができます。 |
TextStream | TextStream オブジェクトは、テキスト ファイルの読み取りまたは書き込みを可能にします。 |
したがって、図式的に FileSystemObject は、次のように示すことができます:
ただし、FSO は上記のオブジェクトの大半と間接的通信を行うことに留意ください。 ただ、「Drives」用のオブジェクトコレクションを直接含んでいます。 Drives” コレクションの各 “Drive” オブジェクトは、”Folder” オブジェクトのチェーンを含んでいます。 そして、各「Folder」オブジェクトは「File」コレクションを含んでいます。
より意味を持たせるために、このように言ってみましょう。 FileSystemObject には、ドライブ、フォルダー、またはファイルに関する特定の情報をフェッチ (読み取り) するための 3 つのメイン メソッドがあり、これらのメソッドはそれぞれ GetDrive
、GetFolder
、GetFile
になっています。 たとえば、特定のファイルのファイル サイズを調べる必要がある場合、GetFile
メソッドのインスタンスを作成し、その size
プロパティをフェッチします。 以下のセクションでは、FileSystemObject に含まれるすべてのメソッドについて説明します。
FSO メソッド
以下の表は、さまざまな FileObjectSystem メソッドとそれらが実行するタスクについての詳細を示しています。
Method | Description |
---|---|
GetDrive, GetFolder, and GetFile | These methods are used for fetching information about Drive, Folders, and Files each respective。 |
CreateFolder and CreateTextFile | 新しいフォルダーまたはファイルを作成するのに役立ちます。 |
DeleteFile and DeleteFolder | 既存のファイルまたはフォルダーを削除するのに役立ちます。 |
CopyFile および CopyFolder | これらのメソッドは、ファイルまたはフォルダーをある場所から別の場所にコピーするのに役立ちます。 |
MoveFile および MoveFolder | これらのメソッドは、ファイルまたはフォルダーをある場所から別の場所に移動するのに役立ちます。 |
VBA で FileSystemObject を作成する: このセクションでは、次の 2 つを扱います。
- Microsoft Scripting Runtime Library、つまり Scrrun.dll
- FSO オブジェクトを作成するための参照を作成することです。
Microsoft Scripting Runtime Libraryの参照を作成する
Microsoft Scripting Runtime Libraryの参照を作成するには、次の手順を実行します。
- 次に、上記のように「ツール」>「参照」に移動します。
- これにより、参照ウィンドウが開かれます。
- Microsoft Scripting Runtime Libraryへの参照が追加されました。
FSOオブジェクトの作成
FSOオブジェクトの作成は簡単です。
- ここでモジュールウィンドウに「
Public FSO As New FileSystemObject
」と入力します。 - これにより、FSO という名前で FileSystemObject のオブジェクトが作成されます。
6 FileSystemObjectへのアクセスの実用例
それでは、FSOの実用例に移りましょう:
例1:FSOを使ってドライブの総空き容量を求める。
以下はこれを行うコードです:
'FileSystemObject の作成
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.Digital's(FSOオブジェクトを作成)
Sub Drv As Drive
Sub Space As Double
Set drv = FSO.Digital's(FSOオブジェクトを作成)GetDrive("C:") 'ドライブの作成
object Space = drv.FreeSpace
Space = Space / 1073741824 'バイトをGBに変換
Space = WorksheetFunction.Round(Space, 2) ' 丸め
MsgBox "C: has free space = " & Space & " GB" <6202>最後に、メッセージボックスを使用して空き容量を表示します。
ドライブの空き容量を取得するには、
drv.FreeSpace
およびdrv.AvailableSpace
という2つのプロパティがあることに注意してください。 フォルダが存在しない場合、そのフォルダを作成します。以下はコードです:
'Creating a FileSystemObject
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Enter the path of the folder to check :")
If Len(Fldr_name) > 0
Then If FSO.FolderExists(Fldr_name) = True Then
MsgBox "Folder Exists!"
Else FSO.CreateFolder (Fldr_name)
MsgBox ("Folder Created!")
End If Else MsgBox "Wrong Input"
End If
End Sub説明します。 このコードでは、ユーザーからフォルダのパスを取得するためにInputBox関数を使用しています。 この後、
FolderExists
メソッドと一緒にIfステートメントを使用して、そのフォルダが存在するかどうかをチェックしています。Note:
CreateFolder
method は一度に 1 つのフォルダーしか作成しません。 つまり、引数として「C:industryFolder1」「Folder2」「Folder3」を指定すると、Folder2の中にFolder3が作成されるだけです。Example 3: FSOを使って、ある場所から別の場所にフォルダをコピーするコードを書いてください。
以下がそのコードです。
『FileSystemObjectの作成 Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder "C:\Source-Folder", "D:\Destination-Folder", True MsgBox "Copying Done!" End Sub
Explanation: このコードでは、FSOの
CopyFolder
メソッドを使用しています。このメソッドは3つの引数を受け取ります。- ソースパス
- 宛先パス
- 既存の上書きを指定するブール引数
例 4: FileSystemObjectを使って Temp ディレクトリ、システムフォルダ、Windowsフォルダをフェッチしています。
これを行うには、以下のコードを使用します。
'Creating a FileSystemObject
Public FSO As New FileSystemObject
Sub GetFolderpath()
Dim Windows_Fldr As String
Dim System_Fldr As String
Dim Temp_Fldr As String
Windows_Fldr = FSO.FileObject
FSO.FileObjectを作成する
Dim Windows_Fldr As String
Dim System_Fldr As String
Dim Temp_Fldr As String
FSO.FileObjectを作成する。GetSpecialFolder(0)
System_Fldr = FSO.GetSpecialFolder(1)
Temp_Fldr = FSO.GetSpecialFolder(2)
MsgBox ("Windows folder path = " & Windows_Fldr & vbNewLine & _ "System folder path = " & System_Fldr & vbNewLine & _ "Temp folder path = " & Temp_Fldr)
End SubExplanation.Of .FSO.Get Special Folder (2) vbNewLine “Windows folder” (2) コードでは、FSOの
GetSpecialFolder
メソッドを使用しています。このメソッドは、0-2などの単一の数値引数を受け入れます。-
FSO.GetSpecialFolder(0)
– Windowsフォルダのパスを取得します。 -
FSO.GetSpecialFolder(2)
– ローカル一時フォルダのパスを取得します。
例5:テキストファイルを作成し、それに内容を書き込み、次にファイルを読み込んで、最後にファイルを削除します。
以下は、これを実現するためのコードです。
'Creating a FileSystemObject Public
FSO As New FileSystemObject
Sub CreateFile()
Dim txtstr As TextStream
Dim FileName As String
Dim FileContent As String
Dim File As File
FileName = "C:\TestDirectory³³File.File.txt" '作成するファイル
'ファイルを作成して内容を書き込む
FileContent = InputBox("Enter the File Content")
If Len(FileContent) > 0 Then
Set txtstr = FSO.FSO.File
Len(FileContent) > 0 Then
Set txtstr = FSO.File
FileContent txtstr.Write FileContent
txtstr.Close
End If
' 先ほど作成したファイルからの読み込み
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.GetFile(File Name)
Set txtstr = File.GetFile(FileName)
Set fsO.GetTextStream(File Name)ReadAll txtstr.Close
' 最後にファイルを削除
File.Delete (True)
End If
End SubExplanation: このコードは、まずテキストファイルを作成し、それにコンテンツを追加し、それを読み取り、メッセージボックスを使用して表示し、最後にそのファイルを削除します。
例6:フォルダー内に存在するすべてのファイルを繰り返し、そのサイズと更新日も取得できるVBAコードを記述する。
次のコードは、このタスクを達成することができます。
'FileSystemObject の作成
Public FSO As New FileSystemObject
Sub ListFiles()
'Declaring variables
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Specify the path of a Folder
strPath = "C.File" (フォルダのパスを指定する) Dim strPath As String (フォルダを指定する) Dim NextRow As Long Dim NextRow As Long Dim NextRow As Long 'Discover" (フォルダのパスを指定する)\⑭Set objFolder = FSO.EXCELTrick "
このフォルダのオブジェクトを作成する
Set objFolder = FSO.EXCELTrick = FSO.EXCELTrick "
このフォルダのオブジェクトを作成する。GetFolder(strPath)
'フォルダが空かどうか確認する
If objFolder.GetFolder(strPath)
Set objFolder = FSO.Files.Count = 0 Then
MsgBox "No files were found...", vbExclamation
Exit Sub
End If
'Adding Column names for A, B, and C
Cells(1, "A").Cells(1, "A").Value = "ファイル名"
Cells(1, "B").Value = "サイズ"
Cells(1, "C").Value = "修正日時"
'次に利用できる行を探す
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'フォルダ内の各ファイルをループ処理
For Each objFile In objFolder.Files
'現在のファイルの名前、サイズ、日時をリストアップ
Cells(NextRow, 1).Value = objFile.
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Find the next row NextRow = NextRow + 1
Next objFile
End Sub‘Find the Next row’ = NextRow + 2
Next objFile = NextRow + 3
End Sub‘Next ObjFile’ = Next ObjFile + 2