ファイル内のすべてのエクセルファイルを開いて、閉じる。

この記事から得るもの

FileSystemObject を使って、フォルダ内のすべてのエクセルファイルを開いて、値を書き込み、閉じる方法が分かる。
エクセルファイルを開く、閉じるはサブルーチン化する。


1 背景

VBA100本ノック 23本目:シート構成の一致確認で、サイト管理者のソースコードを見ていたら、エクセルBookを閉じる処理をサブルーチン化していました。そこで、FSOを使えばフォルダ内のすべてのファイルを自動的に開いて、閉じることができるのでは!?と思って書いてみました。

excel-ubara.com

2 実際のコード

<主処理>

Sub すべてのファイルに値を代入()

'FSOを宣言
Dim fso_lord As Object: Set fso_lord = CreateObject("scripting.filesystemobject")

'pathの設定
wbPath = ThisWorkbook.Path & "\23本目\"

Set myfiles = fso_lord.getfolder(wbPath).Files

For Each file In myfiles
    If Not file.Name Like "~$*" Or file.Name Like ".xlsx" Then
        Call OpenBooks_String(wbPath & file.Name)
        Call CloseBooks_Sring(file.Name)
    End If
Next


End Sub

<サブルーチン Open>

Sub OpenBooks_String(ByVal mypath As String)
    
Workbooks.Open mypath
Range("A1").Value = "自動で開きました。"

End Sub

<サブルーチン Close>

Sub CloseBooks_Sring(ByVal myName As String)
    
Dim wb As Workbook
Set wb = Workbooks(myName)

wb.Close (True)

End Sub


処理内容としては、変数wbPathに設定したフォルダ内のすべてのエクセルBook(拡張子が.xlsx)を開いて、A1セルに「自動で開きました」と書き込むだけの処理です。注目すべき点は、すべてのエクセルBookに対して同じ処理ができるという点です。例えば、特定のSheetに値を書き込む、Sheetが存在しなければSheetを作成するという処理を加えてやれば、もっと応用が利く処理になりそうです。

3 感想

VBA100本ノックをやっていく中で、ほかの人のコードを見るとこういう書き方があるのか!と参考になることが多いです。勉強中の方、お仕事などお忙しいでしょうが、VBA100本ノックおすすめです。


ではでは、このへんで(^^)/~~~