※本ブログのページには広告主との提携による広告や宣伝、プロモーションが含まれます。当ブログを経由しての商品の購入や、サービス申し込みが発生すると、それらの提携企業からの成果報酬を受けとる場合があります。

VBA|ファイルシステムオブジェクト(FileSystemObject)でファイルやフォルダを操作する

VBA-ファイルシステムオブジェクトの記事のトップ画像

こちらの記事では、VBAの外部ライブラリであるファイルシステムオブジェクト(FileSystemObject)の機能を紹介します。ファイルシステムオブジェクトを使えば、ファイルやフォルダを作成したり、名前を変更するなどの処理ができます。

例えば、会社などでサーバー上に個人フォルダがあり、特定のファイルを個人フォルダに配布することや、たくさんのファイルの名前を統一性のあるものにまとめて変更したい場合など、どれも手作業でおこなうとボリューム次第では途方もない時間がかかってしまうようなときに使える便利なマクロが作れます。

そんな仕事や作業などの実務でも使い勝手のよいファイルシステムオブジェクトを利用したマクロをつかって、今まで苦労してきた作業の負担を減らすことに挑戦してみてください。

ファイルの名前をひとつずつ変更するのは大変だよね。

ファイル、フォルダの名前の取得や存在チェックなどの処理をおこなうマクロでは、こちらの記事で紹介しているファイルシステムオブジェクト(FileSystemObject)以外にも、Dir関数と呼ばれるものを使う方法もあります。

独学でプログラミングをはじめてみたけど、このままの学習方法に不安を感じているのなら、
オンラインスクールで現役エンジニアのサポートがあるテックアカデミーがおすすめ。
スキマ時間に学べて仕事も保証。必ず副業、始められます。まずは無料でプログラミング体験

ファイルシステムオブジェクト(FileSystemObject)とは

前述のとおり、ファイルシステムオブジェクト(FileSystemObject)とは、ファイルやフォルダを作成したり、名前を変更するときに使える便利なオブジェクトです。こちらのオブジェクトはしばしば「FS」や「FSO」などと略されることが多く、VBAに標準で準備されているものではなく、外部ライブラリのオブジェクトです。

外部ライブラリのオブジェクトを利用するためには、バインディングと呼ばれるものをしなければならないのですが、このバインディングには「事前バインディング」と「実行時バインディング」の2種類の方法があり、厳密な点では違いはありますが、基本的にはどちらの方法でも大丈夫です。

慣れないうちはVBEの入力支援機能(インテリセンス)が使える「事前バインディング」がおすすめですが、このあと説明する”参照設定”をしておくことが前提になるため、複数のパソコンからマクロを実行する可能性があるのであれば「事前バインディング」でVBAのコードを作成した後で「実行時バインディング」に書きかえておくとこちらが原因でマクロが動かないといったトラブルは回避できるでしょう。

ファイルシステムオブジェクト(FileSystemObject)を使うための準備

それでは、ファイルシステムオブジェクト(FileSystemObject)を使うための準備について説明します。

ファイルシステムオブジェクト(FileSystemObject)を使うためには以下の準備作業が必要です。

VBE画面での設定(参照設定)

事前バインディングでファイルシステムオブジェクト(FileSystemObject)を使う場合はこちらの手順を先におこなってください。

参照設定はVBEの画面で「ツール」から「参照設定」を選択し、「Microsoft Scripting Runtime」にチェックをしてください。

1.VBE画面で[ツール]をクリック

VBEの参照設定の方法1

2.[参照設定]をクリック

VBEの参照設定の方法2

3.[Microsoft Scripting Runtime]にチェックをつけて、[OK]をクリック

VBEの参照設定の方法3

慣れないうちは参照設定をする事前バインディングを選ぼうね。

ファイルシステムオブジェクト(FileSystemObject)のバインディング

バインディングとは、結びつける、関連付ける行為です。簡単な表現でいえば、今からファイルシステムオブジェクト(FileSystemObject)を使いますよ。と宣言するようなものです。

文章で書くと難しい表現に聞こえますが、ここではバインディングの種類に応じたVBAコードを書きこむだけです。それぞれのバインディングによってコードの内容が異なりますので、バインディングの種類に応じたコードを書いてください。

ファイルシステムオブジェクトを使うための作法だよ。

事前バインディング

前述の参照設定をおこない、プロシージャに以下のコードを書きこんでください。

※変数名は一定のルールがありますが、任意に指定が可能です。こちらのコードの変数名は、FileSystemObjectの頭文字からFSOに指定しています。

Dim FSO As FileSystemObject
Set FSO = New FileSystemObject

※こちらの場合は事前に参照設定をしておく必要があります。参照設定の手順はこちらを参考にしてください。

実行時バインディング

プロシージャに以下のコードを書きこんでください。

※変数名は一定のルールがありますが、任意に指定が可能です。こちらのコードの変数名は、FileSystemObjectの頭文字からFSOに指定しています。

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

ファイルシステムオブジェクト(FileSystemObject)のメソッド

ファイルシステムオブジェクト(FileSystemObject)では以下のメソッドが利用できます。

メソッドの種類 メソッドの機能・効果
BuildPath 引数に指定した文字列でパスを文字列として生成します。
実際にフォルダ作成処理が実行されるわけではありません。
CopyFile 引数に指定したファイルを指定のパスにコピーします。
ペースト時にファイルの上書きをする/しないの選択ができます。
CopyFolder 引数に指定したフォルダを指定のパスにコピーします。
ペースト時にファイルの上書きをする/しないの選択ができます。
CreateFolder 引数に指定したフォルダを指定のパスにフォルダを作成します。
既に同じ名前のフォルダがあるとエラーが発生します。
CreateTextFile 引数に指定したファイル名を作成します。
テキストファイル(TextStreamオブジェクト)が返されるため、ファイルの読み取りや書きこみに使用できます。
DeleteFile 引数に指定したファイルを削除します。ワイルドカード文字を使って複数の削除も可能です。
読み取り専用ファイルの削除をする/しないの選択ができます。
DeleteFolder 引数に指定したフォルダを削除します。ワイルドカード文字を使って複数の削除も可能です。
読み取り専用ファイルの削除をする/しないの選択ができます。
DriveExists 引数に指定したドライブがコンピュータに存在しているかの判定をします。
判定結果はTrueまたはFlaseで返します。
リムーバブルドライブの場合はメディア(DB、DVD、CDなど)がなくてもTrueを返します。
FileExists 引数に指定したファイルが存在しているかの判定をします。
判定結果はTrueまたはFlaseで返します。
FolderExists 引数に指定したフォルダが存在しているかの判定をします。
判定結果はTrueまたはFlaseで返します。
GetAbsolutePathName 引数に指定したパスの形式に応じてカレントディレクトリ(現在作業中のフォルダ)の完全なパス名を文字列で返します。
パスの区切りには\と/のどちらも使用が可能です。
GetBaseName 引数に指定したパスにあるファイル名のうちベース名を文字列で返します。
ベース名とはファイルの拡張子であるピリオドより左側の文字列のことです。
例:”c:\ sample \テスト.txt “を指定した場合は”テスト”
GetDrive 引数に指定したパスのドライブのDriveオブジェクトを返します。
指定するパスはC、C:、C:\です(Cドライブの場合)。\の右側に文字があるとエラーが発生します。
GetDriveName 引数に指定したパスのドライブ名を文字列で返します。
指定したパスからドライブが特定できなかった場合は空文字“”を返します。
GetExtensionName 引数に指定したパスにあるファイルの拡張子を文字列で返します。
ピリオドより右側の文字列のことです。指定したパスからファイル名が特定できなかった場合は空文字“”を返します。
例:”c:\ sample \テスト.txt” を指定した場合は” txt”
GetFile 引数に指定したパスに含まれるファイルに対応するFileオブジェクトを返します。
GetFileName 引数に指定したパスに含まれるファイルのファイル名を文字列で返します。
指定したパスからファイルが特定できなかった場合は空文字“”を返します。
GetFolder 引数に指定したパスに含まれるフォルダに対応するFolderオブジェクトを返します。
GetParentFolderName 引数に指定したパスのファイルが格納されているフォルダまでのパスを文字列で返します。
フォルダが特定できなかった場合は空文字“”を返します。
例:”c:\ sample \テスト.txt”を指定した場合は”c:\ sample \”
GetSpecialFolder 引数に指定した値に応じた特殊なフォルダのFolderオブジェクトを返します。
引数に設定する値は0(Windowsフォルダ)、1(Systemフォルダ)、2(一時ファイルの格納フォルダ)から指定ができます。
GetTempName 一時フォルダ、一時ファイルの名前(radF7B20.tmpなど)をランダムに生成します。
このメソッドでは名前(文字列)のみが生成され、フォルダやファイルは作成されません。
Move 引数に指定したパスにファイルやフォルダオブジェクトを移動します。
移動先に指定したパスに既に同じファイル名やフォルダ名が存在する場合はエラーが発生します。
こちらのメソッドはMoveFolderメソッドやMoveFileメソッドと同じです。
MoveFile 引数に指定した現在のパスから移動先のパスにファイルを移動します。
現在のパスにはワイルドカード文字を使って複数のファイルを対象にできます。
存在しないパスの場合はエラーが発生します。
移動先に既に同じファイルがある場合もエラーが発生します。
MoveFolder 引数に指定した現在のパスから移動先のパスにフォルダを移動します。
現在のパスにはワイルドカード文字を使って複数のフォルダを対象にできます。
存在しないパスの場合はエラーが発生します。
移動先に既に同じファイルがある場合もエラーが発生します。
OpenAsTextStream 引数に指定したモード・様式に応じてファイルを開きます。テキストファイル(TextStreamオブジェクト)を返します。
引数モードでは1(読み取り専用)、2(上書き用)、8(追記用)のいずれかを指定します。
引数様式では0(ASCIIファイル)、-1(Unicodeファイル)、-2(システムの既定値に従う)のいずれかを指定します。
注:このメソッドを利用するには、GetFileメソッドと併用して対象となるファイルオブジェクトを取得する必要があります。
OpenTextFile 引数に指定したモードや様式に応じてファイルを開きます。テキストファイル(TextStreamオブジェクト)を返します。
引数の読み書きモードでは1(読み取り専用)、2(上書き用)、8(追記用)のいずれかを指定します。
引数のファイルの作成はTrueまたはFalseを指定します。Trueの場合、引数に指定したファイルが存在しないときはファイルを作成します。作成しないときはFalseを指定します。
引数のファイルの形式では0(ASCIIファイル)、-1(Unicodeファイル)、-2(システムの既定値に従う)のいずれかを指定します。
WriteLine 引数に指定した文字列を改行とともにテキストファイル(TextStreamオブジェクト)に書きこみます。
注:このメソッドを利用するには、OpenTextFileメソッドなどと併用して対象となるテキストファイル(TextStreamオブジェクト)を取得する必要があります。

次の項では、それぞれのメソッドの詳細を紹介していきます。

それぞれのメソッドについて紹介していくよ。

この記事におけるそれぞれのメソッドの詳細内容に掲載しているサンプルコードは、該当するメソッドの部分のみを書き出しています。
当然ながら、これらのコードのみでは正常に動作しないため、先に紹介したバインディングなどと組み合わせてプロシージャを作成してください。
また、一部のメソッドでは実例的なコードを紹介する記事にリンクを設けてあるものもありますので、コードの全体像を知りたい人はそちらを参考にしてください。

ファイルシステムオブジェクト(FileSystemObject)のプロパティ

ファイルシステムオブジェクト(FileSystemObject)では以下のプロパティが利用できます。

プロパティの種類 プロパティの説明
Drives パソコン上のすべてのドライブをDriveオブジェクトのコレクションで返します。
Name フォルダやファイルの名前を返します。また引数に指定した文字列を指定した場合、フォルダやファイルの名前を設定します。
注:このプロパティを利用するには、GetFolderやGetFileメソッドなどを併用してFolderまたはFileオブジェクトを取得する必要があります。
Path フォルダやファイルのパスを返します。
注:このプロパティを利用するには、GetFolderやGetFileメソッドなどを併用してFolderまたはFileオブジェクトを取得する必要があります。
Size フォルダやファイルのデータの容量を返します。サイズの単位はバイトです。
注:このプロパティを利用するには、GetFolderやGetFileメソッドなどを併用してFolderまたはFileオブジェクトを取得する必要があります。
Type フォルダやファイルの種類を返します。.txtファイルならテキストドキュメント、.xlsxの場合はMicrosoftExcelワークシートを返します。
注:このプロパティを利用するには、GetFolderやGetFileメソッドなどを併用してFolderまたはFileオブジェクトを取得する必要があります。

コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。

コメント

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