【Excel VBA】FileSystemObjectを使いこなす! 第三回目 オブジェクトを取得する

VBAでの操作

こんにちは、blueです。

前回はFileSystemObject(FSO)を実際に覗いてみました。

前回の記事はこちら

今回からはFSO内のオブジェクトを取得する方法について説明します。

FSOが使えるようになるとファイルの名前変更やコピー、移動などエクスプローラー上で行う操作はすべて可能になります。

難しそうに見えるかもしれませんがおおよその手順は決まっています。

大事な個所を絞って説明していきますのですべて読んでいただければきっと使えるようになります。

Excel内でのVBA操作から一歩踏み出て外の機能が使えるようになっていきましょう。

スポンサーリンク

FSOを使用する手順

FSOを使用してファイル(フォルダ)を操作する手順は以下のようになります。

なおここでいうファイルやフォルダの操作はファイルを開くとか保存するとかなどExcel内で操作できる内容ではなく、ファイルにアクセスして操作する手順になります。

  1. 対象となるファイルあるいはフォルダパスを取得する
  2. 対象のファイル、フォルダパスに対するオブジェクトを取得する
  3. オブジェクトに対してメソッドやプロパティを使用する

今回は2についての続きを説明します。

オブジェクトを取得する前に

前回FSOによってすべてのファイル情報を取得しました。

今回は特定のオブジェクトを直接的に取得していきます。

ただ最初はオブジェクトを宣言する必要がある為、まずは各種オブジェクトとオブジェクトの宣言方法について説明します。

各種オブジェクト

ファイルシステムを扱うScriptingライブラリに存在する代表的なオブジェクト(コレクション)は以下になります。

オブジェクト内容
FileSystemObjectファイルシステムを扱うための最上位のオブジェクト。以下を利用するためにまずはこれを宣言する
DrivesローカルPCに存在するすべてのDrive(C: D:)の集まり(コレクション)
DriveローカルPCに存在する一つのDriveオブジェクト
FoldersFolderオブジェクトの集まり(コレクション)
Folder一つのFolderオブジェクト
FilesFileオブジェクトの集まり(コレクション)
File一つのFileオブジェクト
TextStream一つのテキストファイルオブジェクト

なおFileSystemObject以下を具体的に図に表すと以下のようになります(青字はコレクション)。

クリックすると拡大します

それぞれのコレクションの中にオブジェクトが存在する形です。

これらの中から必要なオブジェクトを宣言していきます。

オブジェクトの宣言

オブジェクトの具体的な宣言方法は以下になります。

    Dim FSO As Scripting.FileSystemObject
    Dim objDrive As Scripting.Drive
    Dim objFolders As Scripting.Folders
    Dim objFolder As Scripting.Folder
    Dim objFile As Scripting.Files
    Dim objFile As Scripting.File
    Dim objTxt As Scripting.TextStream

上記の階層構造の中から欲しいオブジェクトをまずは宣言します。

なおFSOは必須です。以降のオブジェクトはFSOを基に取得します。

参考)これらのオブジェクトはScripting Runtimeの参照設定をOnにしておくとデータ型を記述する際に自動で表示されます(Scripting.と記載しないと表示されないので注意ください)

オブジェクトの取得

では準備も整ったので、目的(あるいは起点となるオブジェクト)を取得します。

オブジェクトを取得するメソッドは以下の3つがメインです。

  • FSO.GetDriveメソッド…指定したパスに対応するDriveオブジェクトを返します
  • FSO.GetFileメソッド…指定したパスに対応するFileオブジェクトを返します
  • GetFolderメソッド…指定したパスに対応するFolderオブジェクトを返します

Docsはこちら

具体的なコードは以下です。

長く見えますが最初のほうは1回目で説明したファイル(フォルダ)をユーザーに選択させるコードです。

第一回目の記事はこちら

GetFileメソッド(最後にファイルを開いています)

Private Sub getFile()
    
    Dim FSO As Scripting.FileSystemObject
    Dim objFile As Scripting.File
    
    Dim FD As FileDialog
    Dim FileName As String
    
    Set FD = Application.FileDialog(msoFileDialogFilePicker)
    
    If FD.Show = True Then
        FileName = FD.SelectedItems(1)
    Else
        Exit Sub
    End If

    Set FSO = New Scripting.FileSystemObject
    Set objFile = FSO.getFile(FileName)
    
    Workbooks.Open objFile.Path


End Sub

GetFolderメソッド(最後にイミディエイトウィンドウにパスを表示させています)

Private Sub getFolder()
    
    Dim FSO As Scripting.FileSystemObject
    Dim objFolder As Scripting.Folder
    
    Dim FD As FileDialog
    Dim FolderName As String
    
    Set FD = Application.FileDialog(msoFileDialogFolderPicker)
    
    If FD.Show = True Then
        FolderName = FD.SelectedItems(1)
    Else
        Exit Sub
    End If

    Set FSO = New Scripting.FileSystemObject
    Set objFolder = FSO.getFolder(FolderName)
    
    Debug.Print objFolder.Path

End Sub

オブジェクトを取得する為に第一回目で取得したフルパスを使用しています。

これで目的のオブジェクトが取得できました。

まとめ

今回はFSOでのファイル(フォルダ)の取得方法について説明しました。

ここまで取得できれば以降はプロパティやメソッドで色々なことが可能になります。

次回はFileオブジェクトやFolderオブジェクトの各種プロパティを説明します。

コメント

タイトルとURLをコピーしました