『Excelでファイル一覧』FileSystemObject編 その1

2021年11月26日 仕事のこだわり

前回の『Excelでファイル一覧を作成する』では、「Dir関数」を使ってファイル一覧を作成しました。

今回は「FileSystemObject」というオブジェクトを使って一覧(ファイル名以外にサイズや作成日時も取得します)を作成したいと思います。

まず第1回目では「FileSystemObject」についての説明です。「FileSystemObject」は、ファイルシステム(Windowsのフォルダやファイル)へのアクセス(情報の取得、作成、削除など)を提供するオブジェクトです。

「FileSystemObject」は外部ライブラリ(ExcelのVBA基本機能以外の機能を使えるように個別の機能を組み込んだライブラリ)のため、使うときは外部ライブラリの参照設定(「この機能をVBAに組み込みますよ」という設定)をします。

■Microsoft Scripting Runtimeの参照設定を利用する

・外部ライブラリの参照設定は、VBEの開発画面から「ツール」-「参照設定」をクリックします。

・「参照可能なライブラリファイル」から「Microsoft Scripting Runtime」にチェックを入れ、OKボタンを押します。

以上で「FileSystemObject」を利用できるようになります。

 

■FileSystemObjectの使い方

———————————————

Dim fso As Object         ‘—-①

Set fso = CreateObject(“Scripting.FileSystemObject”) ‘—-②

———————————————

① fsoという変数をオブジェクト変数として宣言

② CreateObjectでfsoをFileSystemObjectに設定

※「FileSystemObject」を使うときのお決まりと覚えてください。

 

「FileSystemObject」を使うとファイルやフォルダの「作成」、「存在チェック」、「削除」、「コピー」、「移動」等を行うことができます。

今回はファイルとフォルダの「作成」、「存在チェック」の方法をご案内します。

 

◇ファイル・フォルダの作成

・FileSystemObjectのCreateTextFileメソッドを使ってテキストファイルを作成できます。

———————————————

Sub MakeTextFile()

Dim fso As FileSystemObject

Dim ts As TextStream

Set fso = CreateObject(“Scripting.FileSystemObject”)

Set ts = fso.CreateTextFile(“C:\Users\user\Desktop\test.txt”, True)     ‘—-①

ts.WriteLine (“テスト用ファイルです。”)                   ‘—-②

ts.Close                ‘—-③

End Sub

———————————————

① CreateTextFileの1番目の引数は作成するテキストファイルのフルパスのファイル名です。今回はユーザーのデスクトップに「test.txt」というファイルを作ります。2番目の引数(Frue)は同じ名前のファイルがあった場合の上書き指定です。

② 作成したテキストファイルに「テスト用ファイルです。」と文字を書き込んでいます。

③ テキストファイルを閉じます。

 

・フォルダを作るときはCreateFolderメソッドを使います。

———————————————

Sub MakeFolder()

Dim fso As FileSystemObject

Set fso = CreateObject(“Scripting.FileSystemObject”)

fso.CreateFolder (“C:\Users\user\Desktop\Test”)     ‘—-①

End Sub

———————————————

① ユーザーのデスクトップに「Test」というフォルダを作成します。

 

◇ファイル・フォルダの存在チェック

・ファイルの存在チェックはFileExistsメソッドを使います。ファイルが存在すれば[True]、存在しなければ[False]を返します。

この機能をよく使うのは、新しいファイルを作成するときにすでに同じ名前のファイルが存在していないかを確認するときです。

If文を使い、条件に合った場合の処理と合わなかった場合の処理を行っています。

※If文の条件に合った場合は次の行を実行し、条件に合わなかった場合はElse~End Ifの間の処理を実行します。

———————————————

Sub CheckFile()

Dim fso As FileSystemObject

Dim ts As TextStream

Set fso = CreateObject(“Scripting.FileSystemObject”)

If fso.FileExists(“C:\Users\user\Desktop\test.txt”) Then         ‘—-①

MsgBox “ファイルが存在します!”                      ‘—-②

Else

Set ts = fso.CreateTextFile(“C:\Users\user\Desktop\test.txt”, False)            ‘—-③

ts.WriteLine (“テスト用ファイルです。”)            ‘—-④

ts.Close         ‘—-⑤

End If

End Sub

———————————————

① 条件に合った(ファイルが存在する)場合に次の行(②)が実行されます。

② メッセージを表示します。

③ 条件に合わなかった(ファイルが存在しない)場合にファイルを作成します。

④、⑤ 前出と同様テキストファイルを作成します。

・フォルダの存在チェックも同様にFolderExistsメソッドを使います。

———————————————

Sub FolderCheck()

Dim fso As FileSystemObject

Dim ts As TextStream

Set fso = CreateObject(“Scripting.FileSystemObject”)

If fso.FolderExists(“C:\Users\user\Desktop\Test”) Then         ‘—-①

Set ts = fso.CreateTextFile(“C:\Users\user\Desktop\Test\test.txt”)             ‘—-②

ts.WriteLine (“テスト用ファイルです。”)            ‘—-③

ts.Close         ‘—-④

Else

MsgBox “フォルダがありません!”        ‘—-⑤

End If

End Sub

———————————————

① フォルダの存在をチェックして、存在する場合は次の行の処理(②、③、④)を実行します。

⑤ ファルダが存在しない場合にメッセージを表示します。

※存在しないフォルダの下にファイルを作成しようとするとエラーで処理がとまってしまうので、この存在チェックは非常に大事です。

 

次回は、ファイルやフォルダの「削除」、「コピー」、「移動」をご案内します。

Copyright c syshan.jp all rights reserved.