タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

VBAでScripting.FileSystemObjectを使用してのファイル操作

VBA

t f B! P L

 

パソコンの画像

VBAでは、Scripting.FileSystemObject を使用してエクセルファイル内でファイルやフォルダにアクセスし、操作することができます。このオブジェクトを使用すると、エクセルマクロやVBAコード内でファイルの読み書き、フォルダの作成や削除などが可能です。

Scripting.FileSystemObjectの使い方

1. FileSystemObjectの参照

まず、Scripting.FileSystemObject オブジェクトを使用するために、VBAコード内で参照を追加します。

エクセルを開きます。

Alt + F11 キーを押して、VBAエディタを開きます。

「ツール」メニューから「参照設定」を選択し、リストから「Microsoft Scripting Runtime」を探してチェックを入れます。

2. ファイルの作成と書き込み

新しいファイルを作成し、テキストを書き込む例です。

Sub CreateAndWriteToFile()

    Dim fs As Object

    Dim file As Object

   

    ' FileSystemObjectの作成

    Set fs = CreateObject("Scripting.FileSystemObject")

   

    ' 新しいファイルを作成

    Set file = fs.CreateTextFile("C:\example.txt", True)

   

    ' テキストを書き込む

    file.WriteLine "Hello, World!"

   

    ' ファイルを閉じる

    file.Close

End Sub

3. ファイルの読み込み

作成したファイルを読み込む例です。

 

Sub ReadFile()

    Dim fs As Object

    Dim readFile As Object

    Dim contents As String

   

    ' FileSystemObjectの作成

    Set fs = CreateObject("Scripting.FileSystemObject")

   

    ' ファイルを読み込む

    Set readFile = fs.OpenTextFile("C:\example.txt", 1) ' 1: 読み込みモード

    contents = readFile.ReadAll

   

    ' ファイルを閉じる

    readFile.Close

   

    ' コンテンツを表示

    MsgBox "File Contents: " & contents

End Sub

4. フォルダの作成

新しいフォルダを作成する例です。

 

Sub CreateFolder()

    Dim fs As Object

    Dim folder As Object

   

    ' FileSystemObjectの作成

    Set fs = CreateObject("Scripting.FileSystemObject")

   

    ' 新しいフォルダを作成

    Set folder = fs.CreateFolder("C:\ExampleFolder")

End Sub

5. フォルダ内のファイル一覧の取得

特定のフォルダ内のファイル一覧を取得する例です。

 

Sub ListFilesInFolder()

    Dim fs As Object

    Dim targetFolder As Object

    Dim fileItem As Object

   

    ' FileSystemObjectの作成

    Set fs = CreateObject("Scripting.FileSystemObject")

   

    ' 対象のフォルダを取得

    Set targetFolder = fs.GetFolder("C:\ExampleFolder")

   

    ' フォルダ内のファイル一覧を表示

    For Each fileItem In targetFolder.Files

        MsgBox "File: " & fileItem.Name

    Next

End Sub

6. ファイルやフォルダのプロパティの取得

ファイルやフォルダのサイズや日付などのプロパティを取得する例です。

 

Sub GetFileProperties()

    Dim fs As Object

    Dim fileInfo As Object

   

    ' FileSystemObjectの作成

    Set fs = CreateObject("Scripting.FileSystemObject")

   

    ' ファイルのプロパティを取得

    Set fileInfo = fs.GetFile("C:\example.txt")

   

    ' プロパティを表示

    MsgBox "File Size: " & fileInfo.Size & " bytes" & vbCrLf & _

           "Created: " & fileInfo.DateCreated & vbCrLf & _

           "Last Modified: " & fileInfo.DateLastModified

End Sub

これらのVBAコードを使って、エクセル内でファイルやフォルダを効果的に操作できます。コードの詳細は必要に応じて調整し、エラーハンドリングを追加することが重要です。

〇注意点

Scripting.FileSystemObject を使用する際には、以下の注意点を考慮すると良いでしょう:

 

存在確認:

ファイルやフォルダを操作する前に、存在を確認することが重要です。存在しないファイルやフォルダに対して操作を試みるとエラーが発生する可能性があります。

If fs.FileExists("C:\example.txt") Then

    ' ファイルが存在する場合の処理

Else

    ' ファイルが存在しない場合の処理

End If

エラーハンドリング:

ファイルやフォルダの操作は、外部の状況によっては失敗する可能性があります。エラーハンドリングを実装して、エラーが発生した場合に適切に処理するようにしましょう。

On Error Resume Next

' ファイルやフォルダの操作

If Err.Number <> 0 Then

    ' エラーが発生した場合の処理

    MsgBox "エラーが発生しました: " & Err.Description

End If

On Error GoTo 0

慎重な操作:

ファイルやフォルダの操作はシステムに対する変更を伴います。慎重に扱い、誤って重要なファイルを削除したり変更したりしないようにしましょう。

 

ファイルのロック:

ファイルが他のプロセスによってロックされている場合、それによってエラーが発生する可能性があります。ファイルを開く前にロックの状態を確認し、必要に応じて待機するかエラー処理を行いましょう。

If Not IsFileLocked("C:\example.txt") Then

    ' ファイルがロックされていない場合の処理

Else

    ' ファイルがロックされている場合の処理

End If

これに関連して、他のプロセスでファイルを使用中の場合にエラーが発生することがありますので、それに備えて適切な対策を取ることが重要です。

 

これらの注意点を考慮して、Scripting.FileSystemObject を使用すると、ファイルやフォルダを効果的に操作できます。

 

〇フォルダー内のファイルの一覧を作るコード(使用例)

Sub ListFilesInFolderToExcel()

    Dim fs As Object

    Dim folder As Object

    Dim fileItem As Object

    Dim targetWorkbook As Workbook

    Dim targetWorksheet As Worksheet

    Dim rowNum As Long

   

    ' FileSystemObjectの作成

    Set fs = CreateObject("Scripting.FileSystemObject")

   

    ' 対象のフォルダを取得(ここを必要なフォルダのパスに変更)

    Set folder = fs.GetFolder("C:\YourTargetFolder")

   

    ' 新しいワークブックを作成

    Set targetWorkbook = Workbooks.Add

    ' デフォルトのシートを使用する場合

    Set targetWorksheet = targetWorkbook.Sheets(1)

    ' あるいは、新しいシートを追加する場合

    ' Set targetWorksheet = targetWorkbook.Sheets.Add

   

    ' 列ヘッダーを追加

    targetWorksheet.Cells(1, 1).Value = "ファイル名"

   

    ' 行番号初期化

    rowNum = 2

   

    ' フォルダ内のファイル一覧をExcelに書き込む

    For Each fileItem In folder.Files

        targetWorksheet.Cells(rowNum, 1).Value = fileItem.Name

        rowNum = rowNum + 1

    Next

   

    ' 必要に応じて、ワークブックを保存する

    ' targetWorkbook.SaveAs "C:\Path\To\Save\Result.xlsx"

End Sub

〇まとめ

こんな感じで、VBAからファイルの操作などが簡単に行えます。

一度使ってみてはどうでしょうか?

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ