何十枚もあるエクセルの日付更新に手間がかかる…
フォルダ内のすべてのエクセルに同じ処理をする方法を知りたい!
たくさんのエクセルをいちいち開いて、同じ内容を入力するような作業って、時間的にもメンタル的にもつらいですよね。10個、20個とエクセルがあると、開いて閉じてを繰り返すだけの単純作業は、こなすだけで気がめいってしまいます。
そこで今回は、指定したフォルダ内にある「すべてのエクセルファイル」に対して、特定のセルへ一括で同じ内容を転記(入力)するVBAコードを紹介します。
「どのフォルダの」「どのセルに」「何を入れるか」をエクセルのシート上で直接指示できるVBAになっているので、ぜひ使い方も含めて確認してみてください!
【コピペOK】VBAで複数ファイルを一括処理するコード
まずは、今回使用するVBAコードを紹介します。以下のコードをコピーして使用してください。詳しい使い方や設定方法は、次の項目で順番に解説しています。
Sub UpdateAllExcelFilesInFolder()
Dim wsMacro As Worksheet
Dim folderPath As String
Dim fileName As String
Dim wbTarget As Workbook
Dim wsTarget As Worksheet
Dim rowIdx As Long
' このマクロが書かれているシートを変数にセット
Set wsMacro = ThisWorkbook.ActiveSheet
' B1セルからフォルダのパスを取得
folderPath = wsMacro.Range("B1").Value
' フォルダパスの最後に「\」がなければ付け足す
If Right(folderPath, 1) <> "\" Then
folderPath = folderPath & "\"
End If
' フォルダ内の最初のエクセルファイルを探す
fileName = Dir(folderPath & "*.xls*")
' 画面のちらつきを止めて処理を早くする
Application.ScreenUpdating = False
' ファイルが見つかる限り処理を繰り返す
Do While fileName <> ""
' エクセルファイルを開く
Set wbTarget = Workbooks.Open(folderPath & fileName)
' 開いたファイルの1つ目のシートを対象にする
Set wsTarget = wbTarget.Sheets(1)
' マクロシートの3行目から下に向かって順番に処理
rowIdx = 3
Do While wsMacro.Cells(rowIdx, 1).Value <> ""
' A列のセル番号へ、B列の記入内容を書き込む
wsTarget.Range(wsMacro.Cells(rowIdx, 1).Value).Value = wsMacro.Cells(rowIdx, 2).Value
' 次の行へ進む
rowIdx = rowIdx + 1
Loop
' 上書き保存して閉じる
wbTarget.Close SaveChanges:=True
' 次のファイルを探す
fileName = Dir()
Loop
' 画面の更新を元に戻す
Application.ScreenUpdating = True
MsgBox "すべてのファイルへの記入が完了しました!", vbInformation
End Sub
【番外】すぐ使えるエクセルファイル
VBAの設定に不安がある方や、フォーマットを作る時間すら惜しいという方向けに、VBAがすでに組み込まれた完成版のエクセルファイルを用意しました。ここにパスと転記内容を書き込むだけで、すぐに一括処理が実行できます。
エクセルファイルはNoteで販売しています。すぐに実務で使いたい方はこちらを活用してください。
▼ ツールダウンロードはこちら
なお。Outlook操作やファイル整理など、今後追加されるツールもすべて使える「まとめ買いセット」も紹介しています。複数使う予定の方は、こちらも確認してみてください。
▼ 効率化ツール全セットはこちら
一括処理VBAの動作と結果の紹介
このVBAがどのような動きをするのか、具体的なイメージを紹介します。今回は、以下の記事で紹介した、議事録の日付・題名・場所を自動入力する場合を例に解説します。
一括処理VBAの動作
今回は以下のような資料の作成日・議題・日時・場所を自動転記する場合の想定で処理を行います。
まず、マクロを実行するエクセルシートに、エクセルが入っているフォルダと入力したい場所、入力する内容を記載します。
この状態で実行し、処理が終わると完了メッセージが表示されます。
指定したすべてのファイルの狙ったセルに対して、データが転記されます。
一括処理VBAの使い方について
それでは、ここからはエクセルへ実装する手順を解説します。
手順1:エクセルの準備(フォーマットの作成)
まずは、エクセルフォーマットを用意します。
セルA1に「対象フォルダ」、セルA2に「対象セル」、セルB2に「記入内容」と見出しを作ります。
こちらはvbaに直接機能しませんが、列ずれや書き間違い防止のため、この通りに入れるのをお勧めします。
次に、エクセルが入っているフォルダと、セルの場所、書きたい内容を書いていきます。
手順2:VBAコードの埋め込み(重要)
次に、先ほどコピーしたコードをエクセルに埋め込みます。
エクセルの「開発」タブから「Visual Basic」をクリックして、VBAエディタを開いてください。
「開発」タブを出す設定や、コードの基本的な書き方については、VBAの基礎まとめのページで詳しく解説しています。設定がまだの方は、こちらの記事もぜひ参考にしてみてください。
手順3:動作確認
あとは実行するだけですが、ここで一つ注意事項があります。
このマクロは、対象となるファイルを「自動で上書き保存」しながら進みます。そのため万が一、指定するセルを間違えていた場合、大切な元のデータを消してしまう可能性があります。
初めて実行する際は、必ず「テスト用のフォルダ」を作り、コピーしたダミーのファイルで動作確認を行ってください。
実行が完了すると以下のように、すべてのエクセルに記載された内容が一括で反映されます。
まとめ
今回は、VBAを使ってフォルダ内の複数エクセルファイルへ、一括で同じ処理(転記)を実行する方法を紹介しました。
このブログでは、このように様々な効率化に関する情報を発信していますので、ほかの記事も参考にして、業務の効率化を進めてみてください!

