【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
関連記事
-
-
【Excel】エクセル。シートの名前を変更しようとしたらエラーポップアップ
エクセルでシート名を変更しようとしたときに… シートの名前をほかのシート、Visual B
-
-
【拡張子:accde】Access2007でaccdeの使い道と作成方法
うちの職場ではEUC(End User Computing)として Access2007 を多用して
-
-
【Outlook】Gmailを使う時のOutlookの設定方法
Gmailアカウント側の設定を行った上で、Outlookの設定を行います。 Gmailアカウン
-
-
【Excel】複数項目を指定した昇順、降順の並べ替え方法
Excel 2013でのお話。 なぜかわからないが、Excelのオートフィルターを使うと単一の
-
-
【Access】リンクテーブルが接続(表示)できない。
Accessを使用していて、リンクテーブルが表示(接続)できない。 あまりないけど、困った時に
-
-
【SQL Server】Excel VBAのレコードセットを使ってテーブルの一括更新
前々回は読み取り専用でレコードセットへ取得し、結果をエクセルへ書き出し 前回はVBAから更新S
-
-
【Access】クエリ実行時に「引数が違います」と表示され実行できないときの対処法
Accessのクエリを実行すると 引数が違います とポップアップが表示され、クエリが実行できない
-
-
【PowerPoint】表や図形、画像オブジェクトの位置をピッタリ合わせる方法
パワーポイントで、図形や画像等のオブジェクトの細かい位置調整は、 完璧主義のこだわり派には非常にイ
-
-
【Excel】グラフ(オブジェクト)の名前変更方法
Excel2013でのお話。 とりあえず、僕が探したところ三つありました。 【1つ目】名前ボ
-
-
【Outlook】送信時の0x80040201エラーの対処
発生した環境 OSはWindows7。Outlookは2013。イーモバイルのPocket W




Comment
[…] ード下記ブログ記事を参考。 IT Diary 【Excel】複数のエクセル(ブック)のシートを一つのブックに結合するVBA […]
[…] ード下記ブログ記事を参考。 IT Diary 【Excel】複数のエクセル(ブック)のシートを一つのブックに結合するVBA […]
[…] は下記ブログ記事を参考。 IT Diary 【Excel】複数のエクセル(ブック)のシートを一つのブックに結合するVBA […]