Excel VBAで個人的に使う短いコードを集めてみます。思いついたら適宜追加します。
フォルダ内のファイルを順次処理
Dir関数を使う方法と、FSO(ファイルシステムオブジェクト)を使う方法があります。現代人は後者です。下のようにCreateObjectを使う書き方であれば、VBEでの参照設定は不要です。
パスの区切りは、Windowsでは通常バックスラッシュ(半角の\)あるいは円マーク(半角の¥)ですが、ここではふつうのスラッシュ(半角の/)でも大丈夫です。Macを併用する場合は、トラブルの原因になるのでスラッシュにしておくといいかも。
パス文字列の最後にも区切り文字が必要です。エクスプローラからパスをコピペしたときには、最後の区切り文字は付いてこないのでハマりどころです。
Sub OpenFilesInFolder()
Dim path, fso, file, files
path = "C:/Users/xxxxxx/フォルダ名/"
'path = ThisWorkbook.Path & "/フォルダ名/" '相対パスの場合
Set fso = CreateObject("Scripting.FileSystemObject")
Set files = fso.GetFolder(path).files
'フォルダ内の全ファイルについて処理
For Each file In files
'ファイルを開いてブックとして取得
Dim wb As Workbook
Set wb = Workbooks.Open(file)
'ブックに対する処理
'保存せずに閉じる
Call wb.Close(SaveChanges:=False)
Next file
End Sub
以上はファイルを開いて、Excelのブックとして処理をする場合の書き方です。テキストファイルとして処理をする場合の書き方は「VBA FSO OpenTextFile」あたりで検索してください。
なお、複数のブックに対して処理をするもっとも簡単な方法は、処理対象ブックを全て開いておくことです。開かれているブックは Workbooks コレクションに入っているので、下のように書けば、現在開いている全てのブックに対して処理を行うことができます。
Dim wb As Workbook
For Each wb In Workbooks
'ブックに対する処理
Next wb
追記:Word VBA でも同様の書き方が可能ですが、Documents.Openの引数をfile.path
とする必要があるようです。
For Each file In files
Dim doc As Document
Set doc = Documents.Open(file.path)
'ドキュメントに対する処理
Call doc.Close(SaveChanges:=False)
Next file