こちらの記事では、VBAの外部ライブラリであるファイルシステムオブジェクト(FileSystemObject)の機能を紹介します。ファイルシステムオブジェクトを使えば、ファイルやフォルダを作成したり、名前を変更するなどの処理ができます。
例えば、会社などでサーバー上に個人フォルダがあり、特定のファイルを個人フォルダに配布することや、たくさんのファイルの名前を統一性のあるものにまとめて変更したい場合など、どれも手作業でおこなうとボリューム次第では途方もない時間がかかってしまうようなときに使える便利なマクロが作れます。
そんな仕事や作業などの実務でも使い勝手のよいファイルシステムオブジェクトを利用したマクロをつかって、今まで苦労してきた作業の負担を減らすことに挑戦してみてください。
ファイルの名前をひとつずつ変更するのは大変だよね。
ファイル、フォルダの名前の取得や存在チェックなどの処理をおこなうマクロでは、こちらの記事で紹介しているファイルシステムオブジェクト(FileSystemObject)以外にも、Dir関数と呼ばれるものを使う方法もあります。
Dir関数の使い方やサンプルコードを紹介した記事は以下のリンクをクリックしてご覧ください。
オンラインスクールで現役エンジニアのサポートがあるテックアカデミーがおすすめ。
スキマ時間に学べて仕事も保証。必ず副業、始められます。まずは無料でプログラミング体験
ファイルシステムオブジェクト(FileSystemObject)とは
前述のとおり、ファイルシステムオブジェクト(FileSystemObject)とは、ファイルやフォルダを作成したり、名前を変更するときに使える便利なオブジェクトです。こちらのオブジェクトはしばしば「FS」や「FSO」などと略されることが多く、VBAに標準で準備されているものではなく、外部ライブラリのオブジェクトです。
外部ライブラリのオブジェクトを利用するためには、バインディングと呼ばれるものをしなければならないのですが、このバインディングには「事前バインディング」と「実行時バインディング」の2種類の方法があり、厳密な点では違いはありますが、基本的にはどちらの方法でも大丈夫です。
慣れないうちはVBEの入力支援機能(インテリセンス)が使える「事前バインディング」がおすすめですが、このあと説明する”参照設定”をしておくことが前提になるため、複数のパソコンからマクロを実行する可能性があるのであれば「事前バインディング」でVBAのコードを作成した後で「実行時バインディング」に書きかえておくとこちらが原因でマクロが動かないといったトラブルは回避できるでしょう。
ファイルシステムオブジェクト(FileSystemObject)を使うための準備
それでは、ファイルシステムオブジェクト(FileSystemObject)を使うための準備について説明します。
ファイルシステムオブジェクト(FileSystemObject)を使うためには以下の準備作業が必要です。
VBE画面での設定(参照設定)
事前バインディングでファイルシステムオブジェクト(FileSystemObject)を使う場合はこちらの手順を先におこなってください。
参照設定はVBEの画面で「ツール」から「参照設定」を選択し、「Microsoft Scripting Runtime」にチェックをしてください。
参照設定の手順
1.VBE画面で[ツール]をクリック
2.[参照設定]をクリック
3.[Microsoft Scripting Runtime]にチェックをつけて、[OK]をクリック
慣れないうちは参照設定をする事前バインディングを選ぼうね。
ファイルシステムオブジェクト(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オブジェクトを取得する必要があります。 |
コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。
コメント