【Excel】複数のエクセル(ブック)のシートを一つのブックに結合するVBA
複数のエクセルのシートを一つのエクセルにまとめるVBAを作ってみた。
使い方
1.まとめたいエクセルを一つのフォルダへ集める
「*.xls*」で検索するので、エクセルファイル以外のファイルがあっても問題なし。
2.VBAの実行
3.対象フォルダの選択
4.選択した対象フォルダ内に「【結合】エクセル.xlsx」が作成される
「【結合】エクセル.xlsx」に「結合元エクセル名.シート名」として、各シートができる。
ソースコード
Option Explicit '############################################################################# ' Main '############################################################################# Sub Main() '画面表示OFF Application.ScreenUpdating = False '------------------------------------------- ' 変数定義 '------------------------------------------- Const cnsDIR = "\*.xls*" '対象フォルダ内エクセルファイル検索用 Dim FilePath As String 'ファイルパス Dim strFileName As String '結合元ファイル名 Dim i As Integer 'ループ用 'シート結合エクセル用オブジェクト Dim App As Excel.Application Dim Book As Workbook Dim Sheet As Worksheet 'シート結合エクセル保存名 Dim BookName As String '結合元エクセル用 Dim Book2 As Workbook Dim Sheet2 As Worksheet '------------------------------------------- ' シート結合後のファイル名の指定 '------------------------------------------- BookName = "【結合】エクセル.xlsx" '------------------------------------------- ' 結合元のフォルダ選択 '------------------------------------------- FilePath = FolderSelect() 'キャンセル時 If FilePath = "" Then MsgBox "処理キャンセル" End End If '------------------------------------------- ' 結合先ワークブック作成 '------------------------------------------- 'オブジェクトセット Set App = CreateObject("Excel.Application") '非表示 App.Visible = False 'エクセル新規オープン Set Book = App.Workbooks.Add '------------------------------------------- ' 結合先ワークブックにコピー '------------------------------------------- ' 先頭のファイル名の取得 strFileName = Dir(FilePath & cnsDIR, vbNormal) ' ファイルが見つからなくなるまで繰り返す Do While strFileName <> "" '対象フォルダ配下のエクセルオープン Set Book2 = App.Workbooks.Open(Filename:=FilePath & "\" & strFileName) '開いたコピー元のエクセルのシート分繰り返す For i = 1 To Book2.Worksheets.Count '結合用のブックにシートコピー Book2.Worksheets(i).Copy after:=Book.Worksheets(i) 'シート名を「元のエクセル名.元のシート名」に変更 Book.ActiveSheet.Name = Book2.Name & "." & Book2.Worksheets(i).Name Next i 'コピー元のエクセルを保存せずに閉じる Book2.Close (False) ' 次のファイル名を取得 strFileName = Dir() Loop '------------------------------------------- ' 結合したエクセルの終了 '------------------------------------------- '名前を付けて保存 Book.SaveAs Filename:=FilePath & "\" & BookName 'エクセルを閉じる Book.Close (False) '------------------------------------------- ' 終了処理 '------------------------------------------- Set Sheet2 = Nothing Set Book2 = Nothing Set Sheet = Nothing Set Book = Nothing Set App = Nothing MsgBox "処理終了" '画面表示ON Application.ScreenUpdating = False End Sub '############################################################################# ' フォルダ参照用 '############################################################################# Function FolderSelect() As String '------------------------------------------- ' 変数定義 '------------------------------------------- Dim objFileDialog As Object 'FileDialog Dim strTitle As String 'タイトル Dim strPath As String 'フォルダパス Dim strInitialPath As String '初期フォルダパス '------------------------------------------- ' フォルダ選択ダイアログの初期設定 '------------------------------------------- 'ダイアログタイトル strTitle = "結合元のフォルダを選択してください" 'ダイアログの初期パスをモジュール起動エクセルに設定 strInitialPath = ActiveWorkbook.Path '------------------------------------------- ' フォルダ選択ダイアログ表示 '------------------------------------------- Set objFileDialog = Application.FileDialog(msoFileDialogFolderPicker) With objFileDialog 'タイトル .Title = strTitle '初期フォルダパス .InitialFileName = strInitialPath If .Show = False Then 'キャンセル時 GoTo Exit_Function Else 'フォルダパス取得 strPath = .SelectedItems(1) End If End With '------------------------------------------- ' 終了処理 '------------------------------------------- Exit_Function: Set objFileDialog = Nothing FolderSelect = strPath End Function
Adsense
関連記事
-
【Outlook】プレビューウインドウ(閲覧ウインドウ)で表示したら、メール既読のオフ設定
前回、「Outlookの開封メッセージ送信を先送りにする方法」で、少し書きましたが、 私用のメ
-
【Outlook】保存フォルダ(archive.pst)が開けない。
急に「保存フォルダ」が開けなくなった。 Outlookのバージョンは、2007のSP3。
-
【Access】循環参照エラーの回避方法
Accessでクエリを実行しようとすると クエリ定義の SELECT で指定されている別名
-
【Excel】VBAでセルの書き込みを5倍高速化する方法
Excel VBAで While文やFOR文を使用してループさせ、行、列をカウントアップして、 大
-
【Excel】「メモリまたはディスクの空き容量が~」のポップアップで開けない時の対処法
メモリまたはディスクの空き容量が不足しているため、ドキュメントを開いたり、保存したりできません。
-
【Access】リンクテーブルの一括変換。ODBCを使わずにSQL Serverへ接続
Accessのリンクテーブルの接続先を一括で変更する方法 この方法なら、ODBCを使用していな
-
【Access】「更新可能なクエリであることが必要です」のクエリのエラーポップアップ
Accessでクエリを作成し、実行すると 「更新可能なクエリであることが必要です。」
-
【Outlook】開封メッセージ送信を先送りする技。
朝一でOutlookを起動したら、開封確認のメッセージ。 すごく嫌。個人的には、非常に嫌い。
-
【Access】クエリで小数点の切り下げ、切り上げ
Access2007には、roundup、rounddown関数がない。 なので、純粋に関数だ
-
【拡張子:accde】Access2007でaccdeの使い道と作成方法
うちの職場ではEUC(End User Computing)として Access2007 を多用して
Comment
[…] ード下記ブログ記事を参考。 IT Diary 【Excel】複数のエクセル(ブック)のシートを一つのブックに結合するVBA […]
[…] ード下記ブログ記事を参考。 IT Diary 【Excel】複数のエクセル(ブック)のシートを一つのブックに結合するVBA […]
[…] は下記ブログ記事を参考。 IT Diary 【Excel】複数のエクセル(ブック)のシートを一つのブックに結合するVBA […]