【Excel VBA】FileSystemObjectを使いこなす! 第五回目 オブジェクトのメソッドを使いこなす

VBAでの操作

こんにちは、blueです。

前回はFileSystemObject(FSO)内のオブジェクトに対してプロパティの説明をしました。

前回の記事はこちら

今回は取得したオブジェクトに対してメソッドの説明をします。

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

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

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

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

スポンサーリンク

FSOを使用する手順

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

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

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

今回は3のオブジェクトのメソッドについて説明します。

Folderオブジェクトのメソッド

フォルダオブジェクトのメソッドとしては以下のようなものがあります。

メソッド引数説明
Copyコピー先フォルダのパス,
[上書きの有無]
Folderオブジェクトをコピー先フォルダにコピーする
上書きの有無は省略可能 規定値はTrue
Delete[読み取り専用の削除有無]Folderオブジェクトを削除する
読み取り専用の削除有無は省略可能 規定値はFalse
Move移動先フォルダのパスFolderオブジェクトを移動先フォルダに移動する 

これらは普通にエクスプローラー上でもできる操作なのでイメージがわきやすいと思います。

実際のコードは以下になります。

(長いですが今回追加したコードは下から4行目以降です)

Private Sub Folder()
    
    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)
    
    objFolder.Copy "C:\Users\Public\Documents\親フォルダ2\"
    objFolder.Move "C:\Users\Public\Videos\"
    objFolder.Delete
    
End Sub

注意点としては

  • パスを直接記載する際は最後に\が必要
  • Moveメソッドで移動したあとはオブジェクトのパスも変わる
  • 同名のフォルダが存在する際Copyメソッドではエラーが出ないが, Moveメソッドではエラーになる

でしょうか。

これらのメソッドでは元のパスがobjFolderのパスになるので行き先パスだけの記載になります。

Fileオブジェクトのメソッド

ファイルオブジェクトのメソッドとしては以下のようなものがあります。

メソッド引数説明
Copyコピー先フォルダのパス,
[上書きの有無]
Fileオブジェクトをコピー先フォルダにコピーする
上書きの有無は省略可能 規定値はTrue
Delete[読み取り専用の削除有無]Fileオブジェクトを削除する
読み取り専用の削除有無は省略可能 規定値はFalse
Move移動先フォルダのパスFileオブジェクトを移動先フォルダに移動する 

同様に実際のコードは以下になります。

(同様に今回作成したコードは下から4行目以降です)

Private Sub FileMethod()
    
    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)
    
    objFile.Copy "C:\Users\Public\Documents\親フォルダ1\子フォルダ2\"
    objFile.Move "C:\Users\Public\Documents\親フォルダ1\子フォルダ3\"
    objFile.Delete
    
End Sub

これらのメソッドも元のパスがobjFileのパスになるので行き先パスだけの記載になります。

Foldersコレクションのメソッド

Foldersコレクションのメソッドは以下になります。

メソッド引数説明
Add名前Foldersコレクションに名前で表されるFolderオブジェクトを作成する

フォルダの追加メソッドはFoldersコレクションに対して行います。

FileSystemObjectのメソッド

FileSystemObjectにも実は同様のメソッドが存在します。

メソッド引数
CopyFolderコピー元フォルダのパス,コピー先フォルダのパス,[上書きの有無]
CopyFile コピー元ファイルのパス,コピー先フォルダのパス,[上書きの有無]
DeleteFolder削除フォルダのパス
DeleteFile削除ファイルのパス
MoveFolder 移動元フォルダのパス,移動先フォルダのパス
MoveFile 移動元フォルダのパス,移動先フォルダのパス

違いがわかりにくいかもしれませんがこれらを使用するメリット、デメリットは以下です。

  • (メリット)あらかじめコレクションやオブジェクトを取得する必要がない
  • (メリット)複数のフォルダやファイルの指定が可能
  • (デメリット)両方のパスを記載しないといけない

直接FSOから操作したほうがよいのか、オブジェクトを取得指定から操作するのがよいのかは作りたいプログラムによりますが、両方使えるようになるとよいと思います。

またFSOには別に以下のメソッドも存在します。

メソッド引数説明
CreateFolderフォルダパスパスで表されるフォルダを新規作成する
FolderExistsフォルダスペックフォルダスペックで表されるフォルダが存在するかを調べる
FileExistsファイルスペックファイルスペックで表されるフォルダが存在するかを調べる
GetFolderフォルダパス第三回目で紹介
GetFile ファイルパス 第三回目で紹介
GetParentFolderName ファイルパスパスからフォルダパスを取得する
GetFileNameファイルパスパスからファイル名(拡張子含む)のみを取得する
GetBaseName ファイルパス パスからファイル名(拡張子含まない)のみを取得する
GetExtensionNameファイルパス パスから拡張子のみを取得する
GetAbsolutePathName ファイルパス パスから絶対パスを取得する
GetDriveName ファイルパス パスからドライブ名を取得する

〇〇〇Existsはフォルダやファイルの存在の有無を調べます。

またGet〇〇〇Nameで表されるメソッドは以下のようにパスの中の情報を取得します。

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

FileオブジェクトにはExtensionNameやBaseNameといったプロパティは存在しません。

これらを取得する際は文字列の操作が必要となりますが、FSOを使用すればパスから情報を取得することも可能です。

まとめ

今回はFSOで取得したオブジェクトに関するメソッドについて説明しました。

メソッドについてはFolderやFileオブジェクトのみでなく。FSOにも多くのものが存在します。

使い分けは必要となりますがぜひ自分のファイル、フォルダで試してみてもらえると幸いです。

次回からは実務で使える実際のコードについて説明します。

コメント

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