ファイル内のすべてのエクセルファイルを開いて、閉じる。
この記事から得るもの
FileSystemObject を使って、フォルダ内のすべてのエクセルファイルを開いて、値を書き込み、閉じる方法が分かる。
エクセルファイルを開く、閉じるはサブルーチン化する。
1 背景
VBA100本ノック 23本目:シート構成の一致確認で、サイト管理者のソースコードを見ていたら、エクセルBookを閉じる処理をサブルーチン化していました。そこで、FSOを使えばフォルダ内のすべてのファイルを自動的に開いて、閉じることができるのでは!?と思って書いてみました。
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本ノックおすすめです。
ではでは、このへんで(^^)/~~~