VBA フォルダーの操作や取得をするFSOのメソッドやプロパティ

メソッド 内容
GetFolder
【ゲットフォルダー】
フォルダーをFSOのFolder【フォルダー】オブジェクト
として取得します。
FolderExiste
【フォルダーイグズィストゥ】
フォルダーの存在を確認します。
CreateFolder
【クリエートフォルダー】
フォルダーを作成します。
DeleteFolder【デリートフォルダー】
【デリートフォルダー】
フォルダーを削除します。
CopyFolder
【コピーフォルダー】
フォルダーをコピーします。
MoveFolder
【ムーブフォルダー】
フォルダーを移動します。
スポンサーリンク

GetFolder【ゲットフォルダー】メソッド

フォルダーをFileSystemObject【ファイルシステムオブジェクト】(以下FSO)のFolder【フォルダー】オブジェクトとして取得するには、GetFolder【ゲットフォルダー】メソッドを使用します。Folder【フォルダー】オブジェクトのメソッドやプロパティを使用して、ファルダーの操作や取得ができるようになります。

GetFolder【ゲットフォルダー】メソッドの書式と設定値(引数)の説明

オブジェクト.GetFolder( FolderPath )

  • オブジェクト(必須)
    FSOオブジェクトを指定します。
    「Microsoft Scripting Runtime」への参照設定が行われている必要があります。
  • FolderPath【フォルダーパス】(必須)
    Folderオブジェクトとして取得したいフォルダーの名前を指定します。パスを含めて指定できます。フォルダー名のみ指定した場合は、カレントフォルダーのフォルダーが対象になります。
    ※指定したフォルダーが存在しない場合はエラーになります。

FolderExiste【フォルダーイグズィストゥ】メソッド

FSOでフォルダーの存在を確認するには、FolderExiste【フォルダーイグズィストゥ】メソッドを使用します。指定されたファイルが存在する場合は 「True」指定されたファイルが存在しない場合は「False」を返します。

FolderExiste【フォルダーイグズィストゥ】メソッドの書式と設定値(引数)の説明

オブジェクト.FolderExiste( FolderSpec )
【戻り値】ブール型(Boolean)

  • オブジェクト(必須)
    FSOオブジェクトを指定します。
    「Microsoft Scripting Runtime」への参照設定が行われている必要があります。
  • FolderSpec【フォルダースペック】(必須)
    存在を確認したいフォルダーの名前を指定します。パスを含めて指定できます。フォルダー名のみ指定した場は、カレントフォルダーのフォルダーが対象になります。

CreateFolder【クリエートフォルダー】メソッド

FSOでフォルダーを作成するには、CreateFolder【クリエートフォルダー】メソッドを使用します。

CreateFolder【クリエートフォルダー】メソッドの書式と設定値(引数)の説明

オブジェクト.CreateFolder( FolderPath )

  • オブジェクト(必須)
    FSOオブジェクトを指定します。
    「Microsoft Scripting Runtime」への参照設定が行われている必要があります。
  • FolderPath【フォルダーパス】(必須)
    作成するフォルダーのパスと名前を指定します。パスを含めて指定できます。フォルダー名のみ指定した場合は、カレントフォルダーに作成されます。※既に同じ名前のフォルダーが存在する場合はエラーになります。

InputBoxに入力されたフォルダー名でファルダーを作成するコード例

Sub フォルダー作成()
Dim FSO As New FileSystemObject
Dim フォルダー名 As String
フォルダー名 = InputBox("作成するフォルダー名を入力してください。")
If Not FSO.FolderExists(ThisWorkbook.Path & "¥" & フォルダー名) Then
FSO.CreateFolder (ThisWorkbook.Path & "¥" & フォルダー名)
Else
MsgBox "既に同じ名前のフォルダーがあります。"
Exit Sub
End If
MsgBox ThisWorkbook.Path & "に" & フォルダー名 & "フォルダーを作成しました。"
End Sub

DeleteFolder【デリートフォルダー】メソッド

FSOでフォルダーを削除するには、DeleteFolder【デリートフォルダー】メソッドを使用します。フォルダー内に格納されているファイルも同時に削除されます。Kill【キル】ステートメントでファイルを削除してからフォルダーを削除する必要がある
RmDir【リムーブデレクトリ】ステートメントと比べて簡潔なコードで記述ができます。

DeleteFolder【デリートフォルダー】メソッドの書式と設定値(引数)の説明

[]内は省略可能です。
オブジェクト.DeleteFolder ( Folderspec[, Force] )

  • オブジェクト(必須)
    FSOオブジェクトを指定します。
    「Microsoft Scripting Runtime」への参照設定が行われている必要があります。
  • Folderspec【フォルダースペック】(必須)
    削除するフォルダーのパスと名前を指定します。パスを含めて指定できます。フォルダー名のみ指定した場合は、カレントフォルダーのフォルダーが対象になります。※指定したフォルダーが存在しない場合はエラーになります。
  • Force【フォース】(省略可)
    「True」を指定すると「読み取り専用ファイル」も削除できます。既定値は「False」で「読み取り専用ファイル」は削除されません。

InputBoxに入力されたこのブックと同じ場所にあるフォルダーを削除するコード例

Sub フォルダー削除()
Dim FSO As New FileSystemObject
Dim フォルダー名 As String
フォルダー名 = InputBox("削除したいフォルダー名を入力してください。")
If FSO.FolderExists(ThisWorkbook.Path & "¥" & フォルダー名) Then
FSO.DeleteFolder (ThisWorkbook.Path & "¥" & フォルダー名)
Else
MsgBox "指定のフォルダーは存在しません。"
Exit Sub
End If
MsgBox フォルダー名 & "フォルダーを削除しました。"
End Sub

CopyFolder【コピーフォルダー】メソッド

FSOでフォルダーをコピーするには、CopyFolder【コピーフォルダー】メソッドを使用します。

CopyFolder【コピーフォルダー】メソッドの書式と設定値(引数)の説明

[]内は省略可能です。
オブジェクト.CopyFolder ( Source, Destination[, Overwrite] )

  • オブジェクト(必須)
    FSOオブジェクトを指定します。
    「Microsoft Scripting Runtime」への参照設定が行われている必要があります。
  • Source【ソース】(必須)
    コピーをしたいフォルダーの名前を指定します。パスも含めて指定できます。フォルダー名のみ指定した場合はカレントフォルダーのフォルダーが対象になります。※指定したフォルダーが存在しない場合はエラーになります。
  • Destination【デスティネーション】(必須)
    コピー先を表す文字列とフォルダー名を指定します
  • Overwrite【オーバーライト】(省略可)
    コピーしたフォルダーを上書きするかどうかを示すブール値を指定します。省略または「True 」を指定すると既存の同名のフォルダーは上書きされます。「False」 を指定すると上書きされません。

InputBoxで指定されたフォルダーをバックアップフォルダーにコピーするコード例

Sub フォルダーコピー()
Dim FSO As New FileSystemObject
Dim フォルダー名 As String
フォルダー名 = InputBox("バックアップを作成したいフォルダー名を入力してください。")
If FSO.FolderExists(ThisWorkbook.Path & "¥" & フォルダー名) Then
FSO.CopyFolder Source:=ThisWorkbook.Path & "¥" & フォルダー名, _
Destination:=ThisWorkbook.Path & "¥バックアップ¥" & フォルダー名
Else
MsgBox "指定のフォルダーは存在しません。"
Exit Sub
End If
MsgBox フォルダー名 & "フォルダーをバックアップしました。"
End Sub

※このブックの場所に「バックアップ」という名前のフォルダーがあることが前提です。
※フォルダーの中のファイルもコピーされます。


MoveFolder【ムーブフォルダー】メソッド

FSOでフォルダーをコピーするには、MoveFolder【ムーブフォルダー】メソッドを使用します。

MoveFolder【ムーブフォルダー】メソッドの書式と設定値(引数)の説明

[]内は省略可能です。
オブジェクト.MoveFolder ( Source, Destination )

  • オブジェクト(必須)
    FSOオブジェクトを指定します。
    「Microsoft Scripting Runtime」への参照設定が行われている必要があります。
  • Source【ソース】(必須)
    移動をしたいフォルダーの名前を指定します。パスも含めて指定できます。フォルダー名のみ指定した場合はカレントフォルダーのフォルダーが対象になります。※指定したフォルダーが存在しない場合はエラーになります。
  • Destination【デスティネーション】(必須)
    移動先を表す文字列とフォルダー名を指定します指定した移動先が「読み取り専用属性」の場合はエラーになります。指定した移動先に同じファイル名のファイルが存在する場合はエラーになります。

InputBoxで指定されたフォルダーを「処理済みフォルダー」に移動するコード例

Sub フォルダー移動()
Dim FSO As New FileSystemObject
Dim フォルダー名 As String
フォルダー名 = InputBox("処理済みにしたいフォルダー名を拡張子付きで指定してください。")
If FSO.FolderExists(ThisWorkbook.Path & "¥" & フォルダー名) Then
FSO.MoveFolder Source:=ThisWorkbook.Path & "¥" & フォルダー名, _
Destination:=ThisWorkbook.Path & "¥処理済み¥" & フォルダー名
Else
MsgBox "フォルダーは存在しません。"
Exit Sub
End If
MsgBox フォルダー名 & "フォルダーを移動しました。"
End Sub

※このブックの場所に「処理済みフォルダー」があることが前提です。

Folder【フォルダー】オブジェクトの主なプロパティ一覧

  • Attributes【アトリビューツ】プロパティ
    フォルダーの属性を取得または、設定します。
    戻り値はvbFileAttribute列挙型の定数の値で返ります。
vbFileAttribute列挙型の定数
定数 属性の種類
vbNormal 通常ファイル 0
vbReadOnly 読み取り専用 1
vbHidden 隠しファイル 2
vbSystem システムファイル 4
vbDirectory フォルダー 16
vbArchive アーカイブ属性 32
  • DateCreated【デイトクリエーテッド】プロパティ
    フォルダーの作成日時を取得します。
  • DateLastAccessed【デイトラストアクセッドゥ】プロパティ
    最後にアクセスされた日時を取得します。
  • DateLastModified【デイトラストモーディファイド】プロパティ
    最後に更新された日時を取得します。
  • Drive【ドライブ】プロパティ
    指定したファイルが保存されているドライブを取得します。
  • Files【ファイルズ】プロパティ
    フォルダー内のすべてのファイルを取得します。
  • IsRootFolder【イズルートフォルダー】プロパティ
    ルートフォルダーかどうか調べます。
  • Name【ネーム】プロパティ
    フォルダー名を取得または、設定します。
  • ParentFolder【パレントフォルダー】プロパティ
    指定したフォルダーが保存されているフォルダーを取得します。
  • Path【パス】プロパティ
    フォルダーのパスを取得します。
  • Size【サイズ】プロパティ
    フォルダー内のファイルおよび
    サブフォルダーの合計容量をバイト単位で取得します。
  • SubFolder【サブフォルダー】プロパティ
    フォルダー内のすべてのフォルダーを取得します。

InputBoxで指定されたフォルダーの各プロパティを取得するコードと解説

Sub フォルダープロパティ()
Dim FSO As New FileSystemObject
Dim フォルダー名 As String
Dim フォルダー As Object
フォルダー名 = InputBox("プロパティを取得したいフォルダー名を入力してください。")
If FSO.FolderExists(フォルダー名) Then
Set フォルダー = FSO.GetFolder(フォルダー名)
Else
MsgBox "フォルダーは存在しません。"
Exit Sub
End If
With フォルダー
MsgBox "フォルダーの属性は" & .Attributes & "です。" & vbCrLf & _
"フォルダーの作成日時は" & .DateCreated & "です。" & vbCrLf & _
"最後にアクセスした日時は" & .DateLastAccessed & "です。" & vbCrLf & _
"最後に更新した日時は" & .DateLastModified & "です。" & vbCrLf & _
"ドライブは" & .Drive & "です。" & vbCrLf & _
"フォルダー名は" & .Name & "です。" & vbCrLf & _
"フォルダーのパスは" & .Path & "です。" & vbCrLf & _
"フォルダー内のサイズは" & .Size & "バイトです。"
End With
End Sub
2行目【Dim FSO As New FileSystemObject】
NewキーワードでFileSystemObjectのインスタンス(複製)を作成して変数「FSO」を宣言します。
「Microsoft Scripting Runtime」への参照設定が行われている必要があります。


3行目【Dim フォルダー名 As String】
ユーザーがInputBox【インプットボックス】に入力したプロパティを取得するフォルダー名を格納する変数「フォルダー名」を文字列型(String)で宣言します。


4行目【Dim フォルダー As Object】
GetFolder【ゲットフォルダー】メソッドで取得したFolder【フォルダー】オブジェクトを格納する変数「ファイル」をオブジェクト型(Object)で宣言します。


5行目【フォルダー名 = InputBox(“プロパティを取得したいフォルダー名を入力してください。”)】
InputBox【インプットボックス】関数を使用してユーザーが指定したフォルダー名を変数「フォルダー名」に代入します。


6行目【If FSO.FolderExists(フォルダー名) Then】
If【イフ】ステートメント(条件分岐)でFolderExists【フォルダーイグズィストゥ】メソッドを使用して変数フォルダー名に格納されているフォルダーの存在を確認してフォルダーが存在していたときを定義します。


7行目【 Set ファイル = FSO.GetFolder(フォルダー名)】
オブジェクト型変数ファイルにSetステートメントを使用してファイルが存在していた場合にGetFolder【ゲットフォルダー】メソッドで変数「フォルダー名」のFolder【フォルダー】オブジェクトを作成して変数「フォルダー」に代入します。


9行目~10行目【MsgBox “フォルダーは存在しません。”
Exit Sub】

6行目の条件分岐で成立しなかったとき(値がFalse)すなわち、フォルダーが存在しない場合、メッセージを表示してマクロを中止します。


12行目【With フォルダー】
With【ウィズ】ステートメントでフォルダー名のFolder【フォルダー】オブジェクトが格納されている変数フォルダーを指定します。


13行目以降
MsgBox関数を使用して、Forder【フォルダー】オブジェクトの各プロパティで値を表示しています。存在しないプロパティを指定するとエラーになります。

以上で、フォルダーの操作や取得をするFSOのメソッドやプロパティについての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告