【入門編】【初心者向け】Scripting.FileSystemObjectの基本:インスタンス生成とFileExists/FolderExistsによる safe な存在チェック – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

こんにちは!VBScriptの世界へようこそ。
業務自動化の現場で、Excelマクロの次のステップとしてVBScriptに触れる方は本当に多いです。「マクロの記録」という温室から一歩外に出て、本格的なOS操作やファイル自動処理の荒波に漕ぎ出すわけですね。素晴らしい挑戦です!

さて、VBScriptでファイルやフォルダを操作する時、絶対に避けて通れないのが「FSO(Scripting.FileSystemObject)」という最強の相棒です。

今回は、このFSOの正しい召喚(インスタンス生成)の方法と、エラーをスマートに回避する「安全な存在チェック(Safe Check)」の極意を、優しく、そして本質的なところまで徹底的に解説します。ここさえクリアすれば、あなたの書くスクリプトは劇的にタフになりますよ。一緒にマスターしていきましょう!

—

1. なぜ「FSO」が必要なのか?

VBScriptには、標準でファイルを開いたり閉じたりする命令(`Open`ステートメントなど)が古くから備わっています。しかし、それらは機能が貧弱で、少し複雑なフォルダ構造を扱おうとすると、すぐにスクリプトがエラーで力尽きてしまいます。

そこで登場するのが、Windowsが標準で用意しているCOMコンポーネントである `Scripting.FileSystemObject`(通称:FSO) です。

FSOを使いこなせるようになると、以下のような操作が自由自在になります。

  • ファイルやフォルダの「作成」「コピー」「移動」「削除」
  • テキストファイルの読み書き
  • ドライブ情報の取得(空き容量など)

まさに、ファイルシステムの支配者権限を手に入れるようなものです。

—

2. FSOの正しい召喚方法(インスタンス生成)

FSOを使うには、まずメモリ上にその実体(インスタンス)を生成する必要があります。ここで多くの初心者がつまずくポイントがあります。

VBScriptでオブジェクトを生成する際には、主に2つの方法があります。

1. `CreateObject` 関数を使う方法(推奨)
2. `New` キーワードを使う方法(VBScriptでは非推奨・注意が必要)

結論から言いますと、VBScriptでは`CreateObject(“Scripting.FileSystemObject”)`を使うのが鉄則です。

実装コード例:安全なインスタンス化

Option Explicit

‘ —————————————————-
‘ FSOインスタンス生成の基本パターン
‘ —————————————————-
Dim fso

‘ 1. CreateObjectを使ってメモリ上にFSOを召喚する
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ 試しにデスクトップのパスでも取得してみましょう(WScript.Shellを使用)
Dim wsh, desktopPath
Set wsh = CreateObject(“WScript.Shell”)
desktopPath = wsh.SpecialFolders(“Desktop”)

WScript.Echo “FSOの準備が完了しました!”

‘ 2. 使い終わったらメモリを解放する(クリーンなコーディングの基本)
Set fso = Nothing
Set wsh = Nothing

> 💡 先輩エンジニアからの知見:オブジェクトの解放(`Set … = Nothing`)について
> VBScriptが終了する時、メモリは自動的にOSに返却されますが、長大なループ処理や複雑なスクリプトを書く場合、使い終わったオブジェクトをこまめに `Nothing` で解放する癖をつけておくと、メモリリークを防ぎ、動作の安定性が劇的に向上します。プロの作法としてぜひ身につけてくださいね。

—

3. 「痛いエラー」を防ぐ! `FileExists` と `FolderExists` による事前チェック

さて、ここからが本題の本質です。
プログラミング初心者が一番やりがちなミスが、「存在するかどうか分からないファイルやフォルダを、いきなり操作しようとしてエラー落ちする」というパターンです。

例えば、存在しないファイルを開こうとしたり、すでに無いフォルダを削除しようとしたりすると、VBScriptは容赦なく赤いエラーダイアログを出して強制終了します。これでは自動化スクリプトとして失格ですよね。

そこで、処理を実行する前に、FSOの持つメソッドで「本当にあるか?」を必ず確認します。これが Safeな存在チェック です。

  • `fso.FileExists(パス)` : 指定したファイルが存在すれば `True`、なければ `False` を返す
  • `fso.FolderExists(パス)`: 指定したフォルダが存在すれば `True`、なければ `False` を返す

実装コード例:安全な存在確認ロジック

以下のコードをメモ帳に貼り付けて、拡張子を `.vbs` にして保存し、実行してみてください。安全な分岐処理の感覚が掴めますよ。

Option Explicit

Dim fso, targetFile, targetFolder
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ チェックしたいファイル・フォルダのパス(ご自身の環境に合わせて書き換えてください)
targetFile = “C:\Test\sample.txt”
targetFolder = “C:\Test\Backup”

‘ — 【1】ファイルの存在チェック —
If fso.FileExists(targetFile) Then
WScript.Echo “【発見】ファイルが存在します: ” & targetFile
‘ ここにファイルを開く処理や削除する処理を書く
Else
WScript.Echo “【警告】ファイルが見つかりません。スキップします: ” & targetFile
End If

‘ — 【2】フォルダの存在チェック —
If fso.FolderExists(targetFolder) Then
WScript.Echo “【発見】フォルダが存在します: ” & targetFolder
‘ ここにフォルダ内の走査や移動処理を書く
Else
WScript.Echo “【警告】フォルダが存在しないため、新しく作成します: ” & targetFolder

‘ おまけ:フォルダが存在しないなら作っちゃえ!という安全なアプローチ
‘ fso.CreateFolder(targetFolder)
End If

Set fso = Nothing

—

4. 現場で役立つ!陥りやすい罠とエラー対策

最後に、実務でVBScriptを書くときにつまずきやすい「罠」をいくつかシェアしておきます。

罠①:パスの区切り文字(バックスラッシュ `\` とスラッシュ `/`)

Windowsのパス指定では `\`(円マーク、環境によってはバックスラッシュ)を使用しますが、VBScriptの文字列内ではエスケープシーケンスとして扱われることがあります。
基本的には、そのまま `C:\Folder\File.txt` と書いて問題ありませんが、変数結合をする際はパスの結合漏れに注意してください。
(※FSOにはパスを安全に結合してくれる `fso.BuildPath(folder, file)` という神メソッドもあります!)

罠②:ネットワークドライブや権限の問題

`FileExists` はファイルが存在していても、そのファイルを読み取る権限(アクセス権)がない場合に `False` を返すことがあります。「あるはずなのに `False` になる」という場合は、Windowsのアクセス権限やパスのスペルミス(全角・半角の違い)を疑いましょう。

—

まとめ

いかがでしたでしょうか? 今回の内容をまとめます。

1. FSOの生成は `CreateObject(“Scripting.FileSystemObject”)` を使え!
2. 使い終わったオブジェクトは `Set … = Nothing` でスマートに解放せよ!
3. ファイルやフォルダを操作する前には、必ず `FileExists` / `FolderExists` で存在確認(Safe Check)を行え!

ここをクリアできれば、あなたのVBScriptはもう「初心者レベル」ではありません。エラーに強く、現場で安心して動かせる「プロの自動化スクリプト」の第一歩を踏み出しています。

ぜひ、日々の業務効率化にこの知見を役立ててくださいね。それでは、次のステップでお会いしましょう!

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