VBA入門
ファイルシステムオブジェクト(FileSystemObject)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2023-01-17

第119回.ファイルシステムオブジェクト(FileSystemObject)


FileSystemObjectオブジェクトでは、コンピュータのファイル システムへのアクセスが提供されています。
VBAに用意されているファイル操作関連のステートメントや関数より、
より強力で、より多くの機能が搭載されています。


ただし機能が大変多いため、これらを全て覚えるという事は困難です。
一通り目を通して、どんな機能があるかだけを押さえておき、
必要になったら、その部分を調べるようにしてください。


目次

FileSystemObjectオブジェクトの使用方法

使用方法1(実行時バインディング)
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

使用方法2(事前バインディング)
ツール」→「参照設定」に、「Microsoft Scripting Runtime」にチェックを付ける。
Dim objFSO As New FileSystemObject
または、
Dim objFSO As FileSystemObject
Set objFSO = New FileSystemObject


基本的には、参照設定して使うようにして下さい。
VBEでのメンバー候補表示が有効になるので、調べやすくなりますし、入力も楽になります。


FileSystemObjectオブジェクトのプロパティとメソッド

FileSystemObjectオブジェクトのプロパティ

プロパティ 説明
Drives ローカル マシンで利用できるすべての Drive オブジェクトが入った Drives コレクションを返します。

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

メソッド 説明 構文
BuildPath 既存のパスの末尾に名前を追加します object.BuildPath(path, name)
CopyFile ファイルを別の場所へコピーします。 object.CopyFile ( source, destination[, overwrite] )
CopyFolder フォルダを再帰的に別の場所へコピーします。 object.CopyFolder ( source, destination[, overwrite] )
CreateFolder フォルダを作成します。 object.CreateFolder(foldername)
CreateTextFile 指定した名前のファイルを作成し、作成したファイルの読み取りまたは書き込みに使用できる TextStream オブジェクトを返します。 object.CreateTextFile(filename[, overwrite[, unicode]])
DeleteFile 指定されたファイルを削除します。 object.DeleteFile ( filespec[, force] )
DeleteFolder 指定されたフォルダおよびそのフォルダ内のフォルダとファイルを削除します。
読み取り専用属性が設定されているフォルダーを削除する場合は forceにTrueを指定します。省略時はFalseです。
object.DeleteFolder ( folderspec[, force] )
DriveExists 指定されたドライブが存在する場合は、真 (true) を返します。存在しない場合は、偽 (false) を返します。 object.DriveExists(drivespec)
FileExists 指定したファイルが存在する場合は、真 (true) を返します。存在しない場合は、偽 (false) を返します。 object.FileExists(filespec)
FolderExists 指定されたフォルダが存在する場合は、真 (true) を返します。存在しない場合は、偽 (false) を返します。 object.FolderExists(folderspec)
GetAbsolutePathName 指定されたパスの絶対パス名を返します。 object.GetAbsolutePathName(pathspec)
GetBaseName 指定されたパス内に含まれるファイルのベース名 (ファイル拡張子を除いたもの) を表す文字列を返します。 object.GetBaseName(path)
GetDrive 指定されたパスに含まれるドライブに対応する Drive オブジェクトを返します。 object.GetDrive ( drivespec )
GetDriveName 指定されたパスのドライブ名を返します。 object.GetDriveName(path)
GetExtensionName 指定されたパスの拡張子を表す文字列を返します。 object.GetExtensionName(path)
GetFile 指定されたパスに置かれているファイルに対応する File オブジェクトを返します。 object.GetFile(filespec)
GetFileName 指定されたパスの最後のファイル名またはフォルダ名を返します。 object.GetFileName(pathspec)
GetFolder 指定されたパスに置かれているフォルダに対応する Folder オブジェクトを返します。 object.GetFolder(folderspec)
GetParentFolderName 指定されたパスの最後のファイルまたはフォルダの親フォルダの名前が入った文字列を返します。 object.GetParentFolderName(path)
GetSpecialFolder 指定された特殊フォルダを返します。 object.GetSpecialFolder(folderspec)
GetTempName 一時ファイルまたは一時フォルダの名前をランダムに生成して返します。このメソッドは、一時ファイルや一時フォルダを必要とする処理を行うときに便利です。 object.GetTempName ( )
MoveFile ファイル (複数可) を別の場所へ移動します。 object.MoveFile ( source, destination )
MoveFolder フォルダ (複数可) を別の場所へ移動します。 object.MoveFolder ( source, destination )
OpenTextFile 指定したファイルを開き、開いたファイルの読み取り、または追加書き込みに使用できる TextStream オブジェクトを返します。 object.OpenTextFile(filename[, iomode[, create[, format]]])


FileSystemObjectオブジェクトのメソッドの戻り値

FileSystemObjectオブジェクトのメソッドの戻り値としては、以下のオブジェクトがあります。

Driveオブジェクト
Folderオブジェクト
Fileオブジェクト
TextStreamオブジェクト


以下で、それぞれのオブジェクのメンバ(プロパティ、メソッド)の一覧を掲載しておきます。


Driveオブジェクト

プロパティ 説明
AvailableSpace 指定されたドライブまたはネットワーク共有でユーザーが使用できるディスク容量を返します。
DriveLetter 物理ローカル ドライブまたはネットワーク共有のドライブ名を返します。値の取得のみ可能です。
DriveType 指定されたドライブの種類を示す値を返します。
FileSystem 指定されたドライブに使用されているファイル システムの種類を返します。
FreeSpace 指定されたドライブまたはネットワーク共有でユーザーが使用できるディスクの空き境域を返します。値の取得のみ可能です。
IsReady 指定されたドライブの準備ができている場合は真 (true) を返します。
準備ができてない場合は偽 (false) を返します。
Path 指定されたファイル、フォルダ、またはドライブのパスを返します。
RootFolder 指定されたドライブのルート フォルダを表す Folder オブジェクトを返します。
値の取得のみ可能です。
SerialNumber ディスク ボリュームを一意に識別する小数のシリアル番号を返します。
ShareName 指定されたドライブのネットワーク共有名を返します。
TotalSize ドライブまたはネットワーク共有の総容量をバイト単位で返します。
VolumeName 指定されたドライブのボリューム名を設定または返します。値の取得も可能です。


Folderオブジェクト

プロパティ 説明
Attributes ファイルまたはフォルダの属性を設定します。値の取得も可能です。属性によっては、値の取得のみ可能な場合もあります。
DateCreated 指定されたファイルまたはフォルダの作成された日付と時刻を返します。値の取得のみ可能です。
DateLastAccessed 指定されたファイルまたはフォルダが最後にアクセスされたときの日付と時刻を返します。
値の取得のみ可能です。
DateLastModified 指定されたファイルまたはフォルダが最後に更新されたときの日付と時刻を返します。
値の取得のみ可能です。
Drive 指定されたファイルまたはフォルダが格納されているドライブの名前を返します。
値の取得のみ可能です。
Files 指定されたフォルダ内にあるすべての File オブジェクトの入った Files コレクションを返します。
このコレクションには、隠しファイルやシステム ファイルの属性を持つ File オブジェクトも含まれます。
IsRootFolder 指定されたフォルダがルート フォルダの場合は、真 (true) を返します。
ルート フォルダでなければ、偽 (false) を返します。
Name 指定されたファイルまたはフォルダの名前を設定します。値の取得も可能です。
ParentFolder 指定されたファイルまたはフォルダが格納されているフォルダを表す Folder オブジェクトを返します。値の取得のみ可能です。
Path 指定されたファイル、フォルダ、またはドライブのパスを返します。
ShortName 従来の 8.3 形式のファイル名が必要なプログラムのために、短いファイル名を返します。
ShortPath 従来の 8.3 形式のファイル名が必要なプログラムのために、短いパス名を返します。
Size ファイルの場合、指定されたファイルのバイト単位のサイズを返します。フォルダの場合、指定されたフォルダ内のすべてのファイルおよびフォルダの合計サイズをバイト単位で返します。
SubFolders 指定されたフォルダ内にあるすべてのフォルダの入った Folders コレクションを返します。
このコレクションには、隠しファイルやシステム ファイルの属性を持つフォルダも含まれます。
Type ファイルまたはフォルダの種類に関する情報を返します。
たとえば、名前が .TXT の拡張子で終わるファイルの場合なら、"テキスト文書" という文字列が返されます。

メソッド 説明
Copy 指定したファイルまたはフォルダを別の場所にコピーします。
Delete 指定されたファイルまたはフォルダを削除します。
Move 指定されたファイルまたはフォルダを別の場所へ移動します。
OpenAsTextStream 指定したファイルを開き、開いたファイルの読み取り、または追加書き込みに使用できる TextStream オブジェクトを返します。


Fileオブジェクト

プロパティ 説明
Attributes ファイルまたはフォルダの属性を設定します。値の取得も可能です。
属性によっては、値の取得のみ可能な場合もあります。
DateCreated 指定されたファイルまたはフォルダの作成された日付と時刻を返します。
値の取得のみ可能です。
DateLastAccessed 指定されたファイルまたはフォルダが最後にアクセスされたときの日付と時刻を返します。
値の取得のみ可能です。
DateLastModified 指定されたファイルまたはフォルダが最後に更新されたときの日付と時刻を返します。
値の取得のみ可能です。
Drive 指定されたファイルまたはフォルダが格納されているドライブの名前を返します。
値の取得のみ可能です。
Name 指定されたファイルまたはフォルダの名前を設定します。値の取得も可能です。
ParentFolder 指定されたファイルまたはフォルダが格納されているフォルダを表す Folder オブジェクトを返します。値の取得のみ可能です。
Path 指定されたファイル、フォルダ、またはドライブのパスを返します。
ShortName 従来の 8.3 形式のファイル名が必要なプログラムのために、短いファイル名を返します。
ShortPath 従来の 8.3 形式のファイル名が必要なプログラムのために、短いパス名を返します。
Size ファイルの場合、指定されたファイルのバイト単位のサイズを返します。
フォルダの場合、指定されたフォルダ内のすべてのファイルおよびフォルダの合計サイズをバイト単位で返します。
Type ファイルまたはフォルダの種類に関する情報を返します。
たとえば、名前が .TXT の拡張子で終わるファイルの場合なら、"テキスト文書" という文字列が返されます。

メソッド 説明
Copy 指定したファイルまたはフォルダを別の場所にコピーします。
Delete 指定されたファイルまたはフォルダを削除します。
Move 指定されたファイルまたはフォルダを別の場所へ移動します。
OpenAsTextStream 指定したファイルを開き、開いたファイルの読み取り、または追加書き込みに使用できる TextStream オブジェクトを返します。


TextStreamオブジェクト

プロパティ 説明
AtEndOfLine TextStream ファイル内でファイル ポインタが行末 (EOL) の直前に置かれている場合に真 (true) を返します。それ以外の場合は、偽 (false) を返します。値の取得のみ可能です。
AtEndOfStream TextStream ファイル内でファイル ポインタがファイルの最後に置かれている場合に真 (true) を返します。それ以外の場合は、偽 (false) を返します。値の取得のみ可能です。
Column TextStream ファイル内での現在の文字位置のカラム番号を返します。
値の取得のみ可能です。
Line TextStream ファイル内での現在の行番号を返します。
値の取得のみ可能です。

メソッド 説明
Close 開いた状態の TextStream ファイルを閉じます。
Read TextStream ファイルから指定された文字数を読み込み、その結果の文字列を返します。
ReadAll TextStream ファイル全体を読み込み、その結果の文字列を返します。
ReadLine TextStream ファイルから 1 行 (改行文字を除く) を読み込み、その結果の文字列を返します。
Skip TextStream ファイルを読み込むときに指定された数の文字数をスキップします。
SkipLine TextStream ファイルを読み込むときに次の行をスキップします。
Write 指定した文字列を TextStream ファイルに書き込みます。
WriteBlankLines 指定された数の改行文字を TextStream ファイルに書き込みます。
WriteLine 指定した文字列と改行文字を TextStream ファイルに書き込みます。


FileSystemObjectオブジェクトの使用例

指定フォルダ直下のサブフォルダとファイルを一覧出力

Sub フォルダとファイル一覧取得()
  Dim objFSO As FileSystemObject
  Dim objFolder As Folder
  Dim objFolderSub As Folder
  Dim objFile As File
  Dim strDir As String
  Dim i As Long
  
  strDir = "フォルダをフルパスで指定"
  Set objFSO = New FileSystemObject
  If Not objFSO.FolderExists(strDir) Then
    MsgBox ("指定のフォルダは存在しません")
    Exit Sub
  End If
  i = 2 'シートの2行目から出力
  
  'サブフォルダ一覧
  Set objFolder = objFSO.GetFolder(strDir)
  For Each objFolderSub In objFolder.SubFolders
    Cells(i, 2) = objFolderSub.Name
    i = i + 1
  Next
  'ファイル一覧
  For Each objFile In objFolder.Files
    With objFile
      Cells(i, 2) = .Name
      Cells(i, 3) = .Size
      Cells(i, 4) = .DateLastModified
      i = i + 1
    End With
  Next
  
  Set objFSO = Nothing
  Set objFolder = Nothing
  Set objFolderSub = Nothing
End Sub


テキストファイルの読み込みイミディエイトに出力

Sub テキストファイルの読み込み()
  Dim objFSO As New FileSystemObject
  Dim inTS As TextStream
  Dim strFile As String
  Dim strText As String
 
  strFile = "C:\excel-ubara\xcopy_d.bat"
  Set objFSO = New FileSystemObject
  If Not objFSO.FileExists(strFile) Then
    MsgBox ("指定のファイルは存在しません")
    Exit Sub
  End If
  Set inTS = objFSO.OpenTextFile(strFile, ForReading)
  strText = inTS.ReadAll
  Debug.Print strText
End Sub


FileSystemObjectオブジェクトの関連記事と実践例

以下は、VBAサンプル・VBA技術解説でFileSystemObjectオブジェクト使用しているページになります。
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除
VBAでフォルダを削除するにはRmDirステートメントを使いますが、サブフォルダやファイルが入っている場合は、RmDirはエラーとなります。そこで、サブフォルダやファイルがある場合は、FileSystemObjectを使います。以下のサンプル使用時には、「ツール」→「参照設定」で、「MicrosoftScripti…
フルパスをディレクトリ、ファイル名、拡張子に分ける
ファイルのフルパスを、ディレクトリ、ファイル名、拡張子に分けます。FileSystemObjectを使う方法と、VBA関数(InStrRev)で分けるVBAのサンプルコードになります。FileSystemObject 順に、C:\Users\hogehoge\Desktop サンプル.txt サンプル txt と表…
CSVの読み込み方法(改の改)
・CSVの形式について ・CSV読み込みVBAコード ・配列を使ってシートにまとめて出力する場合 ・QueryTablesを使ったCSV読み込みVBAコード ・本サイトにあるCSV関連記事一覧

Dir関数の使い方と合わせてファイル操作全般を学習するには、以下のシリーズが良いでしょう。
FileSystemObjectオブジェクトが出てくるのは、№6からになります。
エクセルでファイル一覧を作成
VBAでサブフォルダ以下も含めて全てのファイル一覧を取得します。最初はサブフォルダは無視して、VBAにある関数とステートメントだけで作成します、その後に、FileSystemObjectで再帰処理をすることで、全てのサブフォルダも取得するようにしていきます。

VBA100本ノックでもFileSystemObjectは多く使用しています。


同じテーマ「マクロVBA入門」の記事

第116回.ファイル操作Ⅱ(OpenとClose)
第117回.ファイル操作Ⅱ(Line Input #)
第118回.ファイル操作Ⅱ(Print #)
第119回.ファイルシステムオブジェクト(FileSystemObject)
第120回.OnTimeメソッド
第121回.SendKeysメソッドとAppActivateステートメント
第122回.Shell関数
第123回.APIについて(Win32API)
第124回.Workbookのイベントプロシージャー
第125回.Worksheetのイベントプロシージャー
第130回.テーブル操作の概要(ListObject)


新着記事NEW ・・・新着記事一覧を見る

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ