VBA の FileSystemObject – 解説

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 つのメイン メソッドがあり、これらのメソッドはそれぞれ GetDriveGetFolder 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: CreateFoldermethod は一度に 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 Sub

    Explanation.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 Sub

    Explanation: このコードは、まずテキストファイルを作成し、それにコンテンツを追加し、それを読み取り、メッセージボックスを使用して表示し、最後にそのファイルを削除します。

    例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

コメントを残す

メールアドレスが公開されることはありません。