複数シート/複数ファイルをマージするサンプル(merge_sheet.vbs)
Option Explicit
Dim g_strDIR
Dim g_strMergeData ' マージ対象のデータフォルダ
Dim g_strNewFile ' マージ先のファイル名
Dim g_strNewSheet ' マージ先のシート名
Main
' メイン プロシージャ
Sub Main()
g_strDIR = "D:\home\edu\hatena\merge_sheet\" ' このマクロがある場所
g_strMergeData = g_strDIR & ".\data" ' マージ対象のデータフォルダ
g_strNewFile = g_strDIR & ".\merge.xls" ' マージ先のファイル名
g_strNewSheet = "[Sheet1$]" ' マージ先のシート名
' 各シートをマージする
MergeSheets
End Sub
' 各シートをマージする
Sub MergeSheets()
Dim cn
Dim rs
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & g_strNewFile & ";Extended Properties=Excel 8.0"
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
Dim folder
Set folder = fs.GetFolder(g_strMergeData)
Dim file
Dim sheet
Dim sheets()
' ファイルの数だけ処理を行う
For Each file In folder.Files
GetSheetNames file, sheets
' ファイル内の各シートを新しいシートに挿入する
For Each sheet In sheets
Dim strSQL
strSQL = "INSERT INTO " & g_strNewSheet & " SELECT * FROM " & sheet
' INSERT 文を実行
cn.Execute strSQL
Next
Next
End Sub
' 指定したファイルのシート名(複数シート名)を取得する
Function GetSheetNames(ByVal file, ByRef sheets())
Dim app
Set app = CreateObject("Excel.Application")
app.Workbooks.Open file
Dim i
Dim nSheets
nSheets = app.Worksheets.Count
ReDim sheets(nSheets - 1)
For i = 0 To nSheets - 1
' "シート名"+"$" を配列に格納
sheets(i) = "[Excel 8.0;database=" & file & "].[" & app.Worksheets(i + 1).Name & "$]"
Next
app.Workbooks.Close
Set app = Nothing
End Function