たくさんのファイルに同じ処理をする面倒な処理はマクロで自動化すると便利
複数のファイルに対してある決まった処理を繰り返し行わないといけないことはよくあると思います。
ファイル数が多いと結構時間と手間がかかって面倒になってきますよね?
そんなときに使えるのが、ある決まったフォルダの中にある全てのExcelファイルを順に開いて処理を行って、保存していくマクロ(VBA)です。
今回は選択したフォルダの中に含まれる全てのExcelファイルに同じ処理を行うマクロ(VBA)を紹介します。
フォルダの中に含まれるファイルのファイル名を取得するマクロ(VBAコード)の紹介
フォルダを指定する → ファイルを順番に開く → 変更を加える → 上書き保存して閉じる → 繰り返すという手順でコードを記載します。
指定したフォルダの中に含まれるファイルを順番に開き、開かれたシートのA1セルに「1」を入力するマクロは以下のようになります。
Sub フォルダの中に含まれるファイルを順に編集する
Dim FolderName As String ’文字列を入れる変数として「FolderName」を使う
Dim index As Integer ’数字を入れる変数として「index」を使う
Dim FileName As String ’文字列を入れる変数として「FileName」を使う
FolderName = Application.GetOpenFilename’ダイアログを用いて選択したファイルのパスをFolderNameとする①
If FolderName = “False” Then’FolderNameが選択されていなければ作業を終了する
Exit Sub
End If
’今のフォルダ名には選択したファイル名含まれているので、ファイル名の部分を切り取る作業。
index = InStrRev(FolderName, “\”)’フォルダ名部分の文字数をカウントする
FolderName = Left(FolderName, index)’ カウントした文字数までの部分を切り取ってフォルダ名とする
FileName = Dir(FolderName & “*xls*”)’ フォルダの中に含まれるファイルを取り出す
Do While FileName <> “”’ ファイルがなくなるまで繰り返す
Workbooks.Open FolderName & FileName’ファイルを開く
Cells(1,1) = 1’ 変更を行う
Workbooks(Workbooks.Count).Save
Workbooks(Workbooks.Count).Close
FileName = Dir() ’
Loop
End Sub
Dim FolderName As String ’文字列を入れる変数として「FolderName」を使う
Dim index As Integer ’数字を入れる変数として「index」を使う
Dim FileName As String ’文字列を入れる変数として「FileName」を使う
FolderName = Application.GetOpenFilename’ダイアログを用いて選択したファイルのパスをFolderNameとする①
If FolderName = “False” Then’FolderNameが選択されていなければ作業を終了する
Exit Sub
End If
’今のフォルダ名には選択したファイル名含まれているので、ファイル名の部分を切り取る作業。
index = InStrRev(FolderName, “\”)’フォルダ名部分の文字数をカウントする
FolderName = Left(FolderName, index)’ カウントした文字数までの部分を切り取ってフォルダ名とする
FileName = Dir(FolderName & “*xls*”)’ フォルダの中に含まれるファイルを取り出す
Do While FileName <> “”’ ファイルがなくなるまで繰り返す
Workbooks.Open FolderName & FileName’ファイルを開く
Cells(1,1) = 1’ 変更を行う
Workbooks(Workbooks.Count).Save
Workbooks(Workbooks.Count).Close
FileName = Dir() ’
Loop
End Sub
スポンサーリンク
VBAコードを変更して応用してみる
①処理を行う対象のシートを絞る
以下のように変更すると一つ目のシートに変更を加えます。
シートの選択を繰り返すと複数のシートに対しても処理できます。
Cells(1,1) = 1
↓
Sheets(1).Select
Cells(1,1) = 1
Cells(1,1) = 1
②フォルダを選択せず、自動でマクロがファイルを選択できるようにする。
フォルダをダイアログで選択するVBAコードは融通が効きますが、「選択するのが面倒」という欠点もあります。
そこで以下のようなVBAコードがおすすめです。Cドライブの「処理前」というフォルダの中にあるExcelファイルに処理をして「処理後」というフォルダに保存していくコードです。
Sub フォルダの中に含まれるファイルのファイルを順に変更する2()
Dim FolderName1 As String
Dim FolderName2 As String
Dim FileName As String
FolderName1 = “C:\処理前\”
FolderName2 = “C:\処理後\”
If FolderName1 = “False” Then
Exit Sub
End If
FileName = Dir(FolderName1 & “*xls*”)
Do While FileName <> “”
Workbooks.Open FileName
Cells(1, 1) = 1
Workbooks(Workbooks.Count).SaveAs FolderName2 & FileName
Workbooks(Workbooks.Count).Close
FileName = Dir()
Loop
End Sub
Dim FolderName1 As String
Dim FolderName2 As String
Dim FileName As String
FolderName1 = “C:\処理前\”
FolderName2 = “C:\処理後\”
If FolderName1 = “False” Then
Exit Sub
End If
FileName = Dir(FolderName1 & “*xls*”)
Do While FileName <> “”
Workbooks.Open FileName
Cells(1, 1) = 1
Workbooks(Workbooks.Count).SaveAs FolderName2 & FileName
Workbooks(Workbooks.Count).Close
FileName = Dir()
Loop
End Sub
関連したVBAコードでより簡単に使えるコードのご紹介
こちらの記事でフォルダに格納された複数のファイルから特定の値を抜き出すコードを紹介しています。
おすすめ書籍 (広告)
Amazon 楽天 Yahoo検索 |
---|
Amazon 価格:¥2,420円 |
楽天Kobo電子書籍ストア 価格:2,574円 |
楽天Kobo電子書籍ストア 価格:2,574円 |
bookfanプレミアム 価格:2,420円 |
bookfanプレミアム 価格:2,200円 |
コメント