Excel VBAでオブジェクト指向プログラミング(FSOを利用したExcelツール編)

2024-01-05

■FileSystemObject(FSO)を利用したExcelツール

FileSystemObject(FSO)を利用したExcelツールをいくつかご紹介します。
⇒FSOの詳細については、Excel VBAでオブジェクト指向プログラミング(FSO編)を参照して下さい。

指定したフォルダの直下にあるフォルダの一覧を表示するExcelツール

行番号9で指定したフォルダの直下にあるフォルダをExcelワークシートに表示するツールです。
行番号11でフォルダのパスをExcelワークシートのA列にセットしています。

  1. Dim sht, fso, subfolder As Object
  2. Dim rcnt As Long
  3. Private Sub Sample1()
  4.     Set sht = ActiveSheet
  5.     sht.Cells.Clear
  6.     rcnt = 0
  7.     Set fso = New FileSystemObject
  8.     For Each subfolder In fso.GetFolder(“C:\work").subfolders
  9.         rcnt = rcnt + 1
  10.         sht.Cells(rcnt, 1) = subfolder.path
  11.     Next subfolder
  12. End Sub

指定したフォルダの配下にある全フォルダの一覧を表示するExcelツール

行番号9で指定したフォルダの配下にある全フォルダをExcelワークシートに表示するツールです。
行番号15でフォルダのパスをExcelワークシートのA列にセットしています。

  1. Dim sht, fso, subfolder As Object
  2. Dim rcnt As Long
  3. Private Sub Sample2()
  4.     Set sht = ActiveSheet
  5.     sht.Cells.Clear
  6.     rcnt = 0
  7.     Set fso = New FileSystemObject
  8.     Call Sample2_sub(“C:\work")
  9. End Sub
  10. Public Sub Sample2_sub(path As String)
  11.     For Each subfolder In fso.GetFolder(path).subfolders
  12.         rcnt = rcnt + 1
  13.         sht.Cells(rcnt, 1) = subfolder.path
  14.         Call Sample2_sub(subfolder.path)
  15.     Next subfolder
  16. End Sub

指定したフォルダの直下にあるファイルの一覧を表示するExcelツール

行番号9で指定したフォルダの直下にあるファイルをExcelワークシートに表示するツールです。
行番号11でファイルのパスをExcelワークシートのA列にセットしています。

  1. Dim sht, fso, file As Object
  2. Dim rcnt As Long
  3. Private Sub Sample3()
  4.     Set sht = ActiveSheet
  5.     sht.Cells.Clear
  6.     rcnt = 0
  7.     Set fso = New FileSystemObject
  8.     For Each file In fso.GetFolder(“C:\work").files
  9.         rcnt = rcnt + 1
  10.         sht.Cells(rcnt, 1) = file.path
  11.     Next file
  12. End Sub

指定したフォルダの配下にある全ファイルの一覧を表示するExcelツール

行番号9で指定したフォルダの配下にある全ファイルをExcelワークシートに表示するツールです。
行番号15でファイルのパスをExcelワークシートのA列にセットしています。

  1. Dim sht, fso, subfolder, file As Object
  2. Dim rcnt As Long
  3. Private Sub Sample4()
  4.     Set sht = ActiveSheet
  5.     sht.Cells.Clear
  6.     rcnt = 0
  7.     Set fso = New FileSystemObject
  8.     Call Sample4_sub(“C:\work")
  9. End Sub
  10. Public Sub Sample4_sub(path As String)
  11.     For Each file In fso.GetFolder(path).files
  12.         rcnt = rcnt + 1
  13.         sht.Cells(rcnt, 1) = file.path
  14.     Next file
  15.     For Each subfolder In fso.GetFolder(path).subfolders
  16.         Call Sample4_sub(subfolder.path)
  17.     Next subfolder
  18. End Sub

指定したフォルダの直下にあるファイルを別のフォルダにコピーするExcelツール

行番号9で指定したフォルダ1の直下にあるファイルを行番号10で指定したフォルダ2にコピー(バックアップ)するツールです。
行番号15~16でフォルダ1のファイル名と最終更新日時をExcelワークシートのA~B列にセット、行番号22でフォルダ2の同名ファイルの最終更新日時をExcelワークシートのC列にセットし、B列≠C列の場合は行番号26でフォルダ1のファイルをフォルダ2にコピーしています。

  1. Dim sht, fso, file As Object
  2. Dim Folder1Path, Folder2Path As String
  3. Dim rcnt, i As Long
  4. Private Sub Sample5()
  5.     Set sht = ActiveSheet
  6.     sht.Cells.Clear
  7.     Set fso = New FileSystemObject
  8.     Folder1Path = “C:\work\folder1\"
  9.     Folder2Path = “C:\work\folder2\"
  10.     rcnt = 0
  11.     For Each file In fso.GetFolder(Folder1Path).files
  12.         rcnt = rcnt + 1
  13.         sht.Cells(rcnt, 1) = file.Name
  14.         sht.Cells(rcnt, 2) = file.DateLastModified
  15.     Next file
  16.     For i = 1 To rcnt
  17.         If fso.FileExists(Folder2Path & sht.Cells(i, 1)) = True Then
  18.             Set file = fso.GetFile(Folder2Path & sht.Cells(i, 1))
  19.             sht.Cells(i, 3) = file.DateLastModified
  20.         End If
  21.         If sht.Cells(i, 2) <> sht.Cells(i, 3) Then
  22.             sht.Cells(i, 3).Interior.Color = RGB(0, 255, 255)
  23.             fso.CopyFile Folder1Path & sht.Cells(i, 1), Folder2Path
  24.         End If
  25.     Next i
  26. End Sub

 

国本温子(著),緑川吉行(著),できるシリーズ編集部(著)
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ

大村あつし(著),古川順平(著)
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ

高橋宣成(著)
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ