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

スポンサーリンク
スポンサーリンク

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

FileSystemObject【ファイルシステムオブジェクト】(以下FSO)の
GetFolder【ゲットフォルダー】メソッドを使用すると
フォルダーをFSOのFolderオブジェクトとして取得できます。

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のメソッドやプロパティに
ついての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク