こんにちは、Ryoです。
普段パソコンを使用する中では気にする頻度も少ないファイルシステム(PC自体のデータ管理システム)ですが、VBAでその情報を取得することができます。用途によってはドライブのFileSystem情報を調査、確認してその結果を条件分岐としたいこともあるかと思いますので、今回はその内容について書いていきます。
1.サンプル概要
サンプルコードを実行すると全てのドライブを対象にファイルシステムを取得し、メッセージボックス上に結果を表示します。

2.サンプルコード
Sub Sample1()
Dim FSO As Object
Dim DrObj As Object
Dim msg As String
'FileSystemObjectオブジェクトを作成し変数に代入
Set FSO = CreateObject("Scripting.FileSystemObject")
'全てのドライブに対して処理を実行
For Each DrObj In FSO.Drives
'ドライブの準備状況を確認する
' ※リムーバルディスクを使用するドライブの場合、
' ディスク等が挿入、またはセットされていないと
' エラーとなり処理が中断する為、その回避目的として
' IsReadyプロパティを利用する
With DrObj
If .IsReady Then
'ドライブレターを取得
msg = msg & .DriveLetter & " : "
'ドライブのファイルシステムを取得し改行(vbLf)
'(改行処理することで視認性を向上)
msg = msg & .FileSystem & vbLf
End If
End With
Next
'上記処理で取得したドライブ情報をメッセージボックスで表示
MsgBox msg, vbInformation
End Sub
このサンプルコードを実行すると環境に応じた結果がメッセージボックスに表示されます。このようにドライブのファイルシステムを調べるにはFileSystemプロパティを使用します。
構文:オブジェクト.FileSystem
FileSystemプロパティはオブジェクトに指定したドライブのファイルシステムを調査し「FAT(File Allocation Tables)」「NTFS(NT File System)」「CDFS(Compact Disc File System)/UDF(Universal Disk Format)」を返します。
流れとしては先ずFileSystemObjectの作成し、For Eachを使用して全ドライブに対し処理を実行しています。
サンプルコード内のコメントにも記載していますが、このドライブ情報を収集する際に準備できていないドライブ(ディスクが挿入されていないDVDドライブなど)ではエラーになりますので、IsReadyプロパティでドライブ準備状況を判定し、準備出来ているドライブのみファイルシステムを取得する形としています。
IsReadyプロパティは指定したドライブの準備ができていればTrue、それ以外はFalseを返すものです。
構文:オブジェクト.IsReady(オブジェクト=Driveオブジェクト)
このプロパティも合わせて使用することで、ドライブのファイルシステム調査処理をスムーズに実行することができます。
後は取得した情報を変数msgに格納し、メッセージボックスで表示しますので、msg = msg & .DriveLetter & ” : “にてドライブレターの取得情報とmsg = msg & .FileSystem & vbLfでファイルシステム情報を文字列として連結、変数msgに格納・改行し、メッセージボックスにて表示しています。
改行処理しながら変数msgに格納することで、サンプル概要に示した一覧形式の表示とし視認性を向上しています。改行処理を行わない場合は下の画像のようになり見難くなりますので、ちょっとしたことではありますが覚えておくと何かと役に立つことも多いかと思います。
≪変数msgに改行せず格納した場合の表示≫

3.まとめ
ファイルシステム情報の取得自体はFileSystemプロパティを利用することで、特に難しい処理をおこなうことなく対処できます。
今回のようなFileSystemObjectオブジェクトを使用した操作はあまり扱う機会が多くないこともあり私自身も忘れがちなのですが、用途によっては有用なケースも多々ありますのでファイルシステムを調べることもできることを知っておくと良いと思います。
以上、ドライブ情報(ファイルシステム種類)を確認する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

